2011-12-08 2 views
1
$remarks = preg_replace('/'.$searchText.'/i', '<span class="searchText">$0</span>', $remarks); 

나는 위의 코드 줄을 사용하여 사용자가 입력 한 검색 텍스트를 강조 표시합니다. 검색 문자열에 슬래시 (/) 문자가 포함 된 경우를 제외하고는 99 %의 시간 동안 작동합니다. 그들이 그렇게하면 PHP는 "알 수없는 수정 자"오류를 반환합니다. preg_replace 줄 앞에 코드 줄을 추가하여 백 슬래시 문자로 슬래시를 이스케이프 처리했습니다.PHP preg_replace with slash character

$searchText = str_replace('/', '\/', $searchText); 

그건 도움이되지 않습니다. 이 작업을 어떻게 수행합니까?

+0

'당신의 추가 라인 대신 preg_replace''의 str_replace'은 추가 슬래시를 제거하려면? 추가 행을 사용하여 /를 이스케이프하지 않고 /로 대체하려고 시도 했습니까? – Ryan

+0

가능한 중복 [preg_replace 오류] (http://stackoverflow.com/questions/4712444/preg-replace-error) – mario

+0

preg_replace 대신 여분의 기능이 필요하다고 생각하지 않기 때문에 preg_replace 대신 str_replace를 사용했습니다. /를 아무 것도 입력하지 않으면 올바른 텍스트가 강조 표시되지 않습니다. – user39653

답변

2

preg_quote가 무엇의 그 : 당신이 사용하고있는 모든 이유는

$searchText = preg_quote($searchText, '/'); 
preg_replace("/$searchText/i", ...) 
+0

그 라인을 추가 한 후에 "컴파일 실패 : 오프셋 0에서 너무 큰 정규 표현식"오류가 발생합니다. – user39653

+0

고마워요. 그 트릭을 했어! ☺ Danke dir! – Pathros