str_replace

时间:2016-01-25 09:44:09

标签: php unicode str-replace

我用seo友好的网址创建一个网站。但是当我使用str_replace()spaces替换为-时,它会更改一些unicode字符。

function create_slug($string){
   $slug = str_replace(' ','-', $string);
   return strtolower($slug);
}

当调用create_slug('Google എഴുത്ത് ഉപകരണങ്ങളുടെ Chrome വിപുലീകരണം');时,我必须将输出作为

  

google-എഴുത്ത്-ഉപകരണങ്ങളുടെ-铬 - വിപുലീകരണം

但有时我的输出为

  

google-ഞഴുത്ത്-ഉപകരണങ്ങളുെ-铬 - വിപുലീകരണം

我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果服务器的语言环境字符集设置不支持UTF-8,strtolower可能会将某些有效的多字节序列误认为是其他内容。结果将是一个损坏的UTF-8字符串。

改为使用mb_strtolower

mb_strtolower($slug, 'UTF-8');

如果您希望strtolowerstrtoupper之类的函数仅考虑ASCII范围内的字符,则可以使用以下方法覆盖服务器的区域设置:

setlocale(LC_CTYPE, 'C');

由于ASCII是UTF-8的子集,现在可以使用strtolower更改字符串而不会出现问题。