【问题标题】:Slug function removing letters with url accentSlug 函数删除带有 url 重音的字母
【发布时间】:2019-02-20 01:38:18
【问题描述】:

下面的功能可以正常工作,但是我无法理解排除有特殊字符的字母被切换的原因:

   function slug( $string, $separator = '-' ) {
        $accents_regex = '~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i';
        $special_cases = array( '&' => 'and', "'" => '');
        $string = mb_strtolower( trim( $string ), 'UTF-8' );
        $string = str_replace( array_keys($special_cases), array_values( $special_cases), $string );
        $string = preg_replace( $accents_regex, '$1', htmlentities( $string, ENT_QUOTES, 'UTF-8' ) );
        $string = preg_replace("/\s+/", "$separator", $string);
        $string = preg_replace("/[$separator]+/u", "$separator", $string);
        return $string;
    }

示例:

字符串:"um rádio bonito"

结果应该是:"um-radio-bonito"

但结果是:"um-rdio-bonito"

【问题讨论】:

  • @Nick 谢谢,我删除了第三和第五行,但错误仍然存​​在
  • @Nick 我不知道该错误是否与 php7 有关,因为我测试的几乎所有 slug 代码都有一些类似的错误
  • 您的代码在 PHP 5.3.29 之后的所有版本上都可以正常工作...3v4l.org/WKuAV
  • 不幸的是,由于我无法访问您的服务器,因此我无法真正判断可能出了什么问题,因为代码似乎可以正常工作。我建议在每个阶段之后回显$string 的值,看看是否有明显的东西出现。
  • 太棒了!我很高兴你让它工作。

标签: php slug


【解决方案1】:

这个功能可以帮到你

function cleanAccents($r)
{
    $r = preg_replace("/ß/","ss", $r);
    $r = preg_replace("/[àáâãäå]/","a", $r);
    $r = preg_replace("/æ/","ae", $r);
    $r = preg_replace("/ç/","c", $r);
    $r = preg_replace("/[èéêë]/","e", $r);
    $r = preg_replace("/[ìíîï]/","i", $r);
    $r = preg_replace("/ñ/","n", $r);
    $r = preg_replace("/[òóôõö]/","o", $r);
    $r = preg_replace("/œ/","oe", $r);
    $r = preg_replace("/[ùúûü]/","u", $r);
    $r = preg_replace("/[ýÿ]/","y", $r);        
    return $r;
}

【讨论】:

    猜你喜欢
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2011-10-22
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多