同时使用 HTML 清理和突出显示文本
Sanitize and Highlight Text with HTML at the same time
我的网站提供了存储用户数据并再次搜索的可能性。搜索时,将打印包含查询的所有数据。我希望突出显示匹配的子字符串。
简而言之,我是这样做的:
function highlight_and_sanitize_search_result($data, $query){
$highlighted = str_replace(
$query,
'<span class="highlight">' . $query . '</span>',
$data
);
return sanitize($highlighted);
}
当我打印函数的 return 值时,我的 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
那么什么是正确的兼顾两者的方法 - 清洁和突出显示?
清理您的数据和查询。然后,经过清理的查询仍会在经过清理的 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
);
}
我的网站提供了存储用户数据并再次搜索的可能性。搜索时,将打印包含查询的所有数据。我希望突出显示匹配的子字符串。
简而言之,我是这样做的:
function highlight_and_sanitize_search_result($data, $query){
$highlighted = str_replace(
$query,
'<span class="highlight">' . $query . '</span>',
$data
);
return sanitize($highlighted);
}
当我打印函数的 return 值时,我的 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
那么什么是正确的兼顾两者的方法 - 清洁和突出显示?
清理您的数据和查询。然后,经过清理的查询仍会在经过清理的 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
);
}