【问题标题】:How to amend sub strings?如何修改子字符串?
【发布时间】:2013-05-22 14:41:03
【问题描述】:

使用将üue 视为相同的排序规则xxx_german2_ci,是否可以将所有出现的München 突出显示如下?

  • 示例输入:"München can also be written as Muenchen."

  • 示例输出:"<b>München</b> can also be written as <b>Muenchen</b>."

注意:另外使用一些非 SQL 编程是可以的。唯一的要求是关于哪些字符序列相同的知识来自 MySQL 排序规则。

【问题讨论】:

    标签: mysql replace collation


    【解决方案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”或类似的东西

    【讨论】:

    【解决方案2】:

    最后我决定全部用 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 2020-01-20
      • 2019-12-13
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多