【发布时间】: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的值,看看是否有明显的东西出现。 -
太棒了!我很高兴你让它工作。