xxx_german2_ci
使用将ü
和视为相同的排序规则ue
,是否可以将所有München
出现的 突出显示如下?
示例输入:
"München can also be written as Muenchen."
示例输出:
"<b>München</b> can also be written as <b>Muenchen</b>."
注意:另外使用一些非SQL编程是可以的。唯一的要求是关于哪些字符序列相同的知识来自 MySQL 排序规则。
我找到了这个表格: http: //developer.mimer.com/collations /charts/index.tml 。当然,它们依赖于语言。整理只是comapring算法。对于一般的 utf8,我不确定它如何处理特殊字符。
您可以使用它们找到所需的符号并在输出中替换它们以获得与示例相同的结果。但是对于那些,您将需要一些编程语言(PHP 或其他任何东西)。
另一个资源:
http://collation-charts.org/
http://mysql.rjweb.org/doc.php/charcoll(在页面下方)
基本上,尝试谷歌“排序算法mysql utf8_general_ci”或类似的东西
最后我决定在 PHP 中完成这一切,因此我的问题是哪些字符与utf8_general_ci
.
下面是我想出的例子:标签由 text 构造
$description
,突出显示子字符串$term
,并转换特殊字符。替换并不完整,但对于实际用例来说可能已经足够了。
mb_internal_encoding("UTF-8");
function withoutAccents($s) {
return strtr(utf8_decode($s),
utf8_decode('àáâãäçèéêëìíîïñòóôõöùúûüýÿß'),
'aaaaaceeeeiiiinooooouuuuyys');
}
function simplified($s) {
return withoutAccents(strtolower($s));
}
function encodedSubstr($s, $start, $length) {
return htmlspecialchars(mb_substr($s, $start, $length));
}
function labelFromDescription($description, $term) {
$simpleTerm = simplified($term);
$simpleDescription = simplified($description);
$lastEndPos = $pos = 0;
$termLen = strlen($simpleTerm);
$label = ''; // HTML
while (($pos = strpos($simpleDescription,
$simpleTerm, $lastEndPos)) !== false) {
$label .=
encodedSubstr($description, $lastEndPos, $pos - $lastEndPos).
'<strong>'.
encodedSubstr($description, $pos, $termLen).
'</strong>';
$lastEndPos = $pos + $termLen;
}
$label .= encodedSubstr($description, $lastEndPos,
strlen($description) - $lastEndPos);
return $label;
}
echo labelFromDescription('São Paulo <SAO>', 'SAO')."\n";
echo labelFromDescription('München <MUC>', 'ünc');
输出:
<strong>São</strong> Paulo <<strong>SAO</strong>>
M<strong>ünc</strong>hen <MUC>