2013-03-15 4 views
0

웹 사이트의 검색 창에 검색어를 기반으로 데이터베이스를 검색하는 PHP 스크립트가 있습니다. 이렇게하면 텍스트 블록이 반환됩니다. 지금 내 검색어가 "test block"이라고 가정 해 보겠습니다. 결과는 다음과 같습니다.동적으로 텍스트를 문자열에 삽입하기 (PHP)

검색 쿼리를 사용하여 데이터베이스에서 수집 한 텍스트의 테스트 블록입니다.

지금, 내 질문은입니다 :이 결과는 처음에 당겨졌다 왜 텍스트의 블록 내에서 "하이라이트"검색어는 사용자가 볼 수있는 수 방법에 대해 설명합니다. 위의 예를 사용하여 다음과 같은 충분할 것이다 :

이 검색 쿼리에서 데이터베이스 에서 수집 된 텍스트의 테스트 블록이다.

지금까지 텍스트를 바꿀만한 몇 가지 사항을 시도했지만 대소 문자를 구분해야하는 실제 문제가 있습니다. 그것은 $resultbold 단어의 인스턴스 내를 통과 할

$exploded = explode(' ', $search_terms); 
foreach($exploded as $word) { 
    // I have to use str_ireplace so the word is actually found 
    $result = str_ireplace($word, '<b>' . $word . '</b>', $result); 
} 

예를 들어, 만약 내가 코드를 사용했다. 검색 결과의 두 번째 예에서 원했던 것처럼 올바르게 표시됩니다. 그러나, 경우에 그 사용자가 "Test Block" 대신 "test block" 사용, 검색 용어는 대문자이로 표시 될 것이다 :이 검색의 데이터베이스 에서 수집 된 테스트 블록 텍스트의입니다

질문.

이것은 사용자가 소문자 검색어를 사용하고 그들이 Sentance와의 시작 부분에 떨어질 일이, 특히 나를 위해 작동하지 않습니다.

본질적으로 문자열에서 단어를 찾고 단어 앞에 직접 텍스트 (이 예에서는 <b>)를 삽입 한 다음 단어 (예 : </b>) 바로 뒤에 텍스트를 삽입합니다. 단어 자체가 바뀌지 않는다. 이 규칙은 내가 믿기 때문에 preg_replacestr_replace을 다룬다. 그래서 나는 정말로 무엇을해야할지 고집했다.

모든 리드가 크게 감사하겠습니다.

foreach ($exploded as $word) { 
    $text = preg_replace("`(" . preg_quote($word) . ")`Ui" , "<b>$1</b>" , $text); 
} 
+0

일치하는 매개 변수를 나타내는 대체 부분에 $ 1과 함께 preg_replace()를 사용할 수 있습니다. http://php.net/manual/en/function.preg-replace.php devlibre에서 anyvie의 의견보기 fr – Waygood

+0

@Waygood이 점에 대해 감사드립니다. 올바른 방향으로 안내해주십시오. 나는 단지'preg_quote()'를 충분히 이해하지 못했다고 생각한다. – burmat

답변

2
$exploded = explode(' ', $search_terms); 
foreach($exploded as $word) { 
    // I have to use str_ireplace so the word is actually found 
    $result = preg_replace("/(".preg_quote($word).")/i", "<b>$1</b>", $result); 
} 

패턴 일치 http://www.php.net/manual/en/reference.pcre.pattern.syntax.php 같은 특정 문자를 사용합니다. []/* + 등 ..이러한 패턴에서 발생하는 경우 그래서 그들은 내가 대소 문자를 구별하기위한 http://www.php.net/manual/en/regexp.reference.delimiters.php

이 경우 내 수정 http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php 을 따라 패턴을 식별하고 구분 기호로 끝 시작 pre_quote();

패턴 먼저 탈출해야

(브래킷)의

아무거나 사용 캡처 이후, 어느 매칭 파라미터 $ 또는 $ 1 또는 제 1, 제 2 등 $위한 2 \\ 1과 여분의 ..

+0

이것은 작동하지만 솔직히 어떻게해야할지 모르겠다. 너는 나에 대한 평신도의 말에 어긋나게 할 수 있니? – burmat

+0

간단 함 허용됨 – burmat

0

당신은 preg_replace이다 사용할 수 있습니다. 당신의 예에서

$result = preg_replace("/\\b(" . preg_quote($word) . ")\\b/i", '<b>$1</b>', $result); 
1

사용 preg_replace :

+0

어떤 이유로 든 문장의 첫 단어에 대해서는 작동하지 않지만 .. – burmat

+0

미안하지만, 세 번째 인자는 당연히 "$ result"여야한다. "$ 단어". 또한 "i"수정자를 패턴에 포함해야합니다. $ result = preg_replace ("./preg_quote ($ word).") \\ b/i ", '$ 1' $ 결과); –

+0

수정 작업이 필요합니다. 고마워 – burmat

0
$string = 'The quick brown fox jumped over the lazy dog.'; 
$search = "brown"; 
$pattern = "/".$search."/"; 
$replacement = "<strong>".$search."</strong>"; 
echo preg_replace($pattern, $replacement, $string); 

빠른 갈색 여우가 게으른 개 위로 튀었습니다

+0

$ search = "br (. *) own"인 경우 어떻게됩니까? ? – Waygood

+0

패턴을 변경하십시오. 항상 똑똑한 엉덩이. :) – karmafunk

+1

우리는 이상한 세계에 살고 있습니다. 영리 할 때는 모욕입니다. LOL – Waygood

관련 문제