У меня есть функция поиска, которая получает данные из таблицы InnoDB (сопоставление utf8_spanish_ci
) и отображает их в HTML-документе (кодировка UTF-8
).Пользователь вводит подстроку и получает список совпадений, в которых выделено первое вхождение подстроки, например:
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