我用seo友好的网址创建一个网站。但是当我使用str_replace()
将spaces
替换为-
时,它会更改一些unicode字符。
function create_slug($string){
$slug = str_replace(' ','-', $string);
return strtolower($slug);
}
当调用create_slug('Google എഴുത്ത് ഉപകരണങ്ങളുടെ Chrome വിപുലീകരണം');
时,我必须将输出作为
google-എഴുത്ത്-ഉപകരണങ്ങളുടെ-铬 - വിപുലീകരണം
但有时我的输出为
google-ഞഴുത്ത്-ഉപകരണങ്ങളുെ-铬 - വിപുലീകരണം
我做错了什么?
答案 0 :(得分:2)
如果服务器的语言环境字符集设置不支持UTF-8,strtolower
可能会将某些有效的多字节序列误认为是其他内容。结果将是一个损坏的UTF-8字符串。
改为使用mb_strtolower
。
mb_strtolower($slug, 'UTF-8');
如果您希望strtolower
和strtoupper
之类的函数仅考虑ASCII范围内的字符,则可以使用以下方法覆盖服务器的区域设置:
setlocale(LC_CTYPE, 'C');
由于ASCII是UTF-8的子集,现在可以使用strtolower
更改字符串而不会出现问题。