2012-08-06 2 views
1
내가 PHP에서 preg_replace이다를 사용하여 내 키워드 검색 텍스트를 강조 할

하지만 문제는 괄호 문자열 (이 같은 )괄호로 PHP preg_replace를 사용하여 검색 키워드를 강조 표시하는 방법은 무엇입니까?

내 보이는 기능 작동하지 않습니다입니다 ...

$text_oritinal = "25 Hours: Colour In White (CD)"; 

function highlight($text_search, $text_original) { 
    $str = preg_replace('#'. $text_search .'#i', '<span style="background-color:#FFFF66; color:#FF0000;">\\0</span>', $text_original); 
    return $str; 
} 

전체 원본 텍스트는 "25 Hours: Colour In White (CD)"

입니다. 키워드를 사용하는 경우

$text_search = "25 Hours: Colour In White"; 

키워드를 강조 표시하고 배경색을 강조 표시하여 텍스트를 대체합니다.

<span style="background-color:#FFFF66; color:#FF0000;">25 Hours: Colour In White</span> (CD) 

그러나! 내가 사용하는 경우이 키워드는 괄호 문자열 ()

$text_search = "25 Hours: Colour In White (CD)"; 

그렇지 교체 배경 및 텍스트 색상을 반환 포함되어 있습니다.

나는 그것을 괄호 문자열 ()

방법 괄호 문자열 ()에 문제없이 일치하는 모든 텍스트 키워드를 강조하는 것입니다 문제는 함께 붙어 생각?

아이디어를 공유하십시오. 감사합니다 :)

+1

편집 할 때 질문을 삭제하지 마십시오. 그것은 쓸데없는 질문을하게 만듭니다. –

+0

나는 당신의 코멘트로 할 것입니다. 고맙습니다. – thegodth

답변

3

당신은 호출해야 preg_quote :

function highlight($text_highlight, $text_search) { 
    $str = preg_replace('#'. preg_quote($text_highlight) .'#i', '<span style="background-color:#FFFF66; color:#FF0000;">\\0</span>', $text_search); 
    return $str; 
} 

설명 :

괄호가 사용된다 submatches을 만들 수 . 검색 문자열에서이를 사용하면 예약 문자이므로 원하지 않는 결과를 초래할 수 있습니다. 정규식 예약 문자를 이스케이프 처리하는 preg_quote을 사용하면이 문자와 다른 문자를 방지 할 수 있습니다.

+0

당신의 대답은 설명이 옳았습니다. 고맙습니다. – thegodth

관련 문제