如何修改子字符串?

时间:2013-05-22 14:41:04

标签: mysql replace collation

使用将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排序规则中获取有关哪些字符序列相同的知识。

2 个答案:

答案 0 :(得分:1)

我找到了这个表: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”或类似的东西

答案 1 :(得分:0)

最后我决定用PHP完成所有操作,因此我的question about which characters are equal with utf8_general_ci

以下是我提出的例子:标签是从文本构建的 $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 &lt;<strong>SAO</strong>&gt;
M<strong>ünc</strong>hen &lt;MUC&gt;