Php Unicode字符正在str_replace上更改
我正在创建一个网站与搜索引擎优化友好的网址。但是,当我使用Php Unicode字符正在str_replace上更改,php,unicode,str-replace,Php,Unicode,Str Replace,我正在创建一个网站与搜索引擎优化友好的网址。但是,当我使用str_replace()将空格替换为-时,它会改变一些unicode字符 function create_slug($string){ $slug = str_replace(' ','-', $string); return strtolower($slug); } 当create_slug('Googleഎഴുത്ത് ഉപകരണങ്ങളുടെ 铬വിപുലീകരണം');时,我必须将输出作为 谷歌-എഴുത്ത്-ഉ
str_replace()
将空格
替换为-
时,它会改变一些unicode字符
function create_slug($string){
$slug = str_replace(' ','-', $string);
return strtolower($slug);
}
当create_slug('Googleഎഴുത്ത് ഉപകരണങ്ങളുടെ 铬വിപുലീകരണം');调用代码>时,我必须将输出作为
谷歌-എഴുത്ത്-ഉപകരണങ്ങളുടെ-铬-വിപുലീകരണം
但有时我会得到输出
谷歌-ഞഴുത്ത്-ഉപകരണങ്ങളു���െ-铬-വിപുലീകരണം
我做错了什么?如果服务器的区域设置字符集设置不支持UTF-8,strtolower
可能会将一些有效的多字节序列误认为其他内容。结果将是损坏的UTF-8字符串
改用
如果希望像strtolower
和strtoupper
这样的函数只考虑ASCII范围内的字符,可以使用以下命令覆盖服务器的区域设置:
setlocale(LC_CTYPE, 'C');
由于ASCII是UTF-8的一个子集,现在可以使用strtolower
毫无问题地更改字符串。这可能会对您有所帮助。在格式良好的UTF-8字符串中,我有时会遇到问题,这不应该是问题。您使用的是什么编码?我使用UTF-8编码,那么您不应该在其上使用strtolower
,因为它可以破坏多字节字符
setlocale(LC_CTYPE, 'C');