2011-02-23 4 views
3

데이터베이스의 특정 키워드를 링크로 바꾸기 위해 텍스트 문자열 (php)을 반복합니다. 난 단지 포장이 필요문자가없는 단어를 찾으려면 정규식

"Random string with the word <a href="developer"><a href="develop">develop</a>er</a> in it" 

:

개발, 개발자, 개발

내가 끝낼 ... : 데이터베이스에있는 단어가 서로 같은 내 존재하는 경우 문제는 가 내을 개발 개발자 아니라 주위에 태그 ... 여기

내 현재 함수입니다 :

function hyper($haystack){ 
    $query = "SELECT * FROM `hyperwords` "; 
    $query .= "WHERE `active` = '1' "; 
    $query .= "ORDER BY LENGTH(hyperword) DESC "; 
    $result = mysql_query($query); 
    while($row = mysql_fetch_array($result)){ 
     $needle = $row['hyperword']; 
     $link = $row['link']; 
     $haystack = preg_replace("/($needle)/iu", "<a class='meta' href='$link'>$1</a>", $haystack); 
    } 
    return $haystack; 
} 

미리 감사드립니다.

+0

... 예를 들어, 대한 here 참조 다른 것과 아닙니다. 부분적인 단어가 필요합니까? 아니면 전체 단어 만 연결해야합니까? – Jacob

+0

@Jacob - 클라이언트가 지정하지 않았으므로 완전한 단어 만 사용한다고 가정합니다. 하지만 아주 좋은 지적입니다. – RANGER

답변

1
$altered = preg_replace("/\b($needle)\b/iu", "<a class='meta' href='$link'>$1</a>", $altered); 

메타 문자는 \ B이 캐럿과 달러 기호와 같은 앵커 :해야 할 것입니다. 은 "단어 경계"라고하는 위치에서 일치합니다. 일치하는 길이는 입니다.

더 많은 정보 : 단어가 다른 단어 내에있는 곳은 그들이 어떤 경우에 대한 문자가 뒤에있는 경우 검사를 넘어 확장

+0

친절하고 고마워, 나는 \ b에 대해 몰랐다. – Jacob

관련 문제