【发布时间】:2010-08-27 09:36:00
【问题描述】:
我有一个搜索功能,它从 InnoDB 表 (utf8_spanish_ci collation) 中获取数据并将其显示在 HTML 文档 (UTF-8 charset) 中。用户键入一个子字符串并获得一个匹配列表,其中第一个子字符串出现突出显示,例如:
Matches for "AL":
Álava
<strong>Al</strong>bacete
<strong>Al</strong>mería
Ciudad Re<strong>al</strong>
Málaga
从示例中可以看出,搜索忽略了大小写和重音差异(MySQL 会自动处理它)。但是,我用来突出显示匹配的代码无法执行后者:
<?php
private static function highlightTerm($full_string, $match){
$start = mb_stripos($full_string, $match);
$length = mb_strlen($match);
return
htmlspecialchars( mb_substr($full_string, 0, $start)) .
'<strong>' . htmlspecialchars( mb_substr($full_string, $start, $length) ) . '</strong>' .
htmlspecialchars( mb_substr($full_string, $start+$length) );
}
?>
是否有一种明智的方法来解决这个问题,而不意味着对所有可能的变化进行硬编码?
更新:系统规格为 PHP/5.2.14 和 MySQL/5.1.48
【问题讨论】: