웹 사이트의 검색 창에 검색어를 기반으로 데이터베이스를 검색하는 PHP 스크립트가 있습니다. 이렇게하면 텍스트 블록이 반환됩니다. 지금 내 검색어가 "test block"
이라고 가정 해 보겠습니다. 결과는 다음과 같습니다.동적으로 텍스트를 문자열에 삽입하기 (PHP)
검색 쿼리를 사용하여 데이터베이스에서 수집 한 텍스트의 테스트 블록입니다.
지금, 내 질문은입니다 :이 결과는 처음에 당겨졌다 왜 텍스트의 블록 내에서 "하이라이트"검색어는 사용자가 볼 수있는 수 방법에 대해 설명합니다. 위의 예를 사용하여 다음과 같은 충분할 것이다 : 이
이 검색 쿼리에서 데이터베이스 에서 수집 된 텍스트의 테스트 블록이다.
지금까지 텍스트를 바꿀만한 몇 가지 사항을 시도했지만 대소 문자를 구분해야하는 실제 문제가 있습니다. 그것은 $result
및 bold
단어의 인스턴스 내를 통과 할
$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_replace
과 str_replace
을 다룬다. 그래서 나는 정말로 무엇을해야할지 고집했다.
모든 리드가 크게 감사하겠습니다.
foreach ($exploded as $word) {
$text = preg_replace("`(" . preg_quote($word) . ")`Ui" , "<b>$1</b>" , $text);
}
일치하는 매개 변수를 나타내는 대체 부분에 $ 1과 함께 preg_replace()를 사용할 수 있습니다. http://php.net/manual/en/function.preg-replace.php devlibre에서 anyvie의 의견보기 fr – Waygood
@Waygood이 점에 대해 감사드립니다. 올바른 방향으로 안내해주십시오. 나는 단지'preg_quote()'를 충분히 이해하지 못했다고 생각한다. – burmat