我从db获取UTF-8字符串,并尝试回显其第一个字符:
$ title = $ model-> title; echo $ title [0];
我得到:
怎么了? 谢谢!
答案 0 :(得分:28)
$first_char = mb_substr($title, 0, 1);
您需要使用PHP的多字节字符串函数来正确处理Unicode字符串:
http://www.php.net/manual/en/ref.mbstring.php
http://www.php.net/manual/en/function.mb-substr.php
您还需要在HTML的<head>
中指定字符编码:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
或:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16" />
答案 1 :(得分:11)
正如之前在其他问题中提到的,使用PHP时,在尝试获取子字符串时,它不了解多字节字符(例如,您使用UTF8)。
其他答案未提及的是您应该提示您要用于mb_substr的编码
所以,例如,我使用它:
mb_substr( "Sunday", 0, 1,'UTF8'); // Returns S
mb_substr( "воскресенье", 0, 1,'UTF8'); // Returns в
答案 2 :(得分:10)
您需要考虑以下几点:
HTH
答案 3 :(得分:4)
默认情况下,PHP字符串不理解多字节字符串,像索引这样的数组会切断第一个字节,如果不是在ascii范围内,则得到这个结果。
使用mb_substr方法。