2015-02-01 3 views
0

내 웹 사이트는 사용자 데이터를 저장하고 다시 검색 할 수있는 기능을 제공합니다. 검색 할 때 쿼리가 포함 된 모든 데이터가 인쇄됩니다. 일치하는 부분 문자열을 강조하고 싶습니다. 단순화 측면에서동시에 HTML로 텍스트 살생 및 강조 표시

나는 이런 식으로했다 :

function highlight_and_sanitize_search_result($data, $query){ 
    $highlighted = str_replace(
         $query, 
         '<span class="highlight">' . $query . '</span>', 
         $data 
       ); 
    return sanitize($highlighted); 
} 

나는 함수의 반환 값을 출력

, 내 HTML 코드는 살균되지 않습니다.
Query: match 
    Data: Here is the match 
Output: Here is the &lt;span class=&quot;match&quot;&gt;match&lt;span&gt; 

그래서 내가 그것을 다른 방법으로 주위 넣어 줄 알았는데 :하지만 그것을 소독 할 때, 내 <span> 거짓도 살균됩니다

function sanitize_and_highlight_search_result($data, $query){ 
    $sanitized = sanitize($highlighted); 
    return str_replace(
       $query, 
       '<span class="highlight">' . $query . '</span>', 
       $data 
     ); 
} 

을하지만 경우에도 오류로 연결 위생 처리 된 HTML 코드의 일부인 검색어를 찾으십시오.

Query: &am 
    Data: You & me 
Output: You <span class="highlight">&am</span>p; me 

위생과 강조 표시를 모두 수행하는 올바른 방법은 무엇입니까?

답변

1

데이터와 쿼리를 모두 살균하십시오. 그런 다음 위생 된 쿼리는 여전히 위생 된 HTML 데이터에서 발견됩니다.

function sanitize_and_highlight_search_result($data, $query){ 
    $sanitized = sanitize($data); 
    $query = sanitize($query); 
    return str_replace(
       $query, 
       '<span class="highlight">' . $query . '</span>', 
       $sanitized 
     ); 
} 

예 : http://3v4l.org/R9n9U