我的网站提供了存储用户数据并再次搜索的可能性。搜索时,正在打印包含查询的所有数据。我希望突出显示匹配的子字符串。
简单来说,我这样做了:
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 <span class="match">match<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
那么做两者的正确方法是什么 - 卫生和突出显示?
答案 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
);
}