我从db中得到一个UTF-8字符串,并试图回显它的第一个字符:
$title = $model->title; echo $title[0];
我得到:�你怎么了?
�
ztigrdn81#
$first_char = mb_substr($title, 0, 1);
您需要使用PHP的多字节字符串函数来正确处理Unicode字符串:http://www.php.net/manual/en/ref.mbstring.phphttp://www.php.net/manual/en/function.mb-substr.php您还需要在HTML的<head>中指定字符编码:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
或:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16" />
iqih9akk2#
您需要考虑以下几点:1.检查数据库中的数据是否以UTF-8格式存储1.检查客户端到DB的连接是否为UTF-8格式(例如,在mysql中,请参阅:(第10页)1.请确保页面的内容类型设置为UTF-8 [可以使用header('Content-Type: utf-8');]1.尝试使用mb_internal_encoding("UTF-8");设置内部编码1.使用mb_substr代替数组索引标记法
header('Content-Type: utf-8');
mb_internal_encoding("UTF-8");
mb_substr
disbfnqx3#
正如前面在其他问题中提到的,使用PHP时,当试图获取子字符串时,它不理解多字节字符(例如,使用UTF8时)。其他答案没有提到的是,您应该提示要为mb_substr使用的编码例如,我用这个:
mb_substr( "Sunday", 0, 1,'UTF8'); // Returns S mb_substr( "воскресенье", 0, 1,'UTF8'); // Returns в
vlurs2pr4#
PHP字符串在默认情况下不理解多字节字符串,像索引这样的数组将截断第一个字节,如果它碰巧不在ascii范围内,你会得到这个结果。使用mb_substr方法。
4条答案
按热度按时间ztigrdn81#
您需要使用PHP的多字节字符串函数来正确处理Unicode字符串:
http://www.php.net/manual/en/ref.mbstring.php
http://www.php.net/manual/en/function.mb-substr.php
您还需要在HTML的
<head>
中指定字符编码:或:
iqih9akk2#
您需要考虑以下几点:
1.检查数据库中的数据是否以UTF-8格式存储
1.检查客户端到DB的连接是否为UTF-8格式(例如,在mysql中,请参阅:(第10页)
1.请确保页面的内容类型设置为UTF-8 [可以使用
header('Content-Type: utf-8');
]1.尝试使用
mb_internal_encoding("UTF-8");
设置内部编码1.使用
mb_substr
代替数组索引标记法disbfnqx3#
正如前面在其他问题中提到的,使用PHP时,当试图获取子字符串时,它不理解多字节字符(例如,使用UTF8时)。
其他答案没有提到的是,您应该提示要为mb_substr使用的编码
例如,我用这个:
vlurs2pr4#
PHP字符串在默认情况下不理解多字节字符串,像索引这样的数组将截断第一个字节,如果它碰巧不在ascii范围内,你会得到这个结果。
使用mb_substr方法。