使用HTML同时清理和突出显示文本

时间:2015-02-01 01:14:03

标签: php html sanitization

我的网站提供了存储用户数据并再次搜索的可能性。搜索时,正在打印包含查询的所有数据。我希望突出显示匹配的子字符串。

简单来说,我这样做了:

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

当我打印函数的返回值时,我的HTML代码没有被清理。但是当我对它进行消毒时,我的<span>也将被错误地消毒:

 Query:  match
  Data:  Here is the match
Output:  Here is the &lt;span class=&quot;match&quot;&gt;match&lt;span&gt;

所以我想我可能会反过来说:

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 个答案:

答案 0 :(得分: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