Unicode 字符在 str_replace 发生变化
Unicode character is changing on str_replace
我正在创建一个 seo 友好的网站 url。但是当我使用 str_replace()
将 spaces
替换为 -
时,它改变了一些 unicode 字符。
function create_slug($string){
$slug = str_replace(' ','-', $string);
return strtolower($slug);
}
当调用 create_slug('Google എഴുത്ത് ഉപകരണങ്ങളുടെ Chrome വിപുലീകരണം');
时,我必须将输出设为
google-എഴുത്ത്-ഉപകരണങ്ങളുടെ-chrome-വിപുലീകരണം
但有时我得到的输出是
google-ഞഴുത്ത്-ഉപകരണങ്ങളു���െ-chrome-വിപുലീകരണം
我做错了什么?
如果您的服务器的区域字符集设置不支持 UTF-8,strtolower
可能会将一些有效的多字节序列误认为是其他字符。结果将是损坏的 UTF-8 字符串。
mb_strtolower($slug, 'UTF-8');
如果您希望像 strtolower
和 strtoupper
这样的函数只考虑 ASCII 范围内的字符,您可以使用以下命令覆盖服务器的区域设置:
setlocale(LC_CTYPE, 'C');
由于 ASCII 是 UTF-8 的子集,现在可以使用 strtolower
毫无问题地更改字符串。
我正在创建一个 seo 友好的网站 url。但是当我使用 str_replace()
将 spaces
替换为 -
时,它改变了一些 unicode 字符。
function create_slug($string){
$slug = str_replace(' ','-', $string);
return strtolower($slug);
}
当调用 create_slug('Google എഴുത്ത് ഉപകരണങ്ങളുടെ Chrome വിപുലീകരണം');
时,我必须将输出设为
google-എഴുത്ത്-ഉപകരണങ്ങളുടെ-chrome-വിപുലീകരണം
但有时我得到的输出是
google-ഞഴുത്ത്-ഉപകരണങ്ങളു���െ-chrome-വിപുലീകരണം
我做错了什么?
如果您的服务器的区域字符集设置不支持 UTF-8,strtolower
可能会将一些有效的多字节序列误认为是其他字符。结果将是损坏的 UTF-8 字符串。
mb_strtolower($slug, 'UTF-8');
如果您希望像 strtolower
和 strtoupper
这样的函数只考虑 ASCII 范围内的字符,您可以使用以下命令覆盖服务器的区域设置:
setlocale(LC_CTYPE, 'C');
由于 ASCII 是 UTF-8 的子集,现在可以使用 strtolower
毫无问题地更改字符串。