获取UTF-8字符串的第一个字符

时间:2012-11-22 08:58:29

标签: php yii

我从db获取UTF-8字符串,并尝试回显其第一个字符:

$ title = $ model-> title; echo $ title [0];

我得到:

怎么了? 谢谢!

4 个答案:

答案 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)

您需要考虑以下几点:

  1. 检查数据库中的数据是否存储为UTF-8
  2. 检查客户端与数据库的连接是否为UTF-8(例如,在mysql中参见:http://www.php.net/manual/en/mysqli.character-set-name.php
  3. 确保页面的内容类型设置为UTF-8 [您可以使用标题('Content-Type:utf-8'); ]
  4. 尝试使用mb_internal_encoding(“UTF-8”)设置内部编码;
  5. HTH

答案 3 :(得分:4)

默认情况下,PHP字符串不理解多字节字符串,像索引这样的数组会切断第一个字节,如果不是在ascii范围内,则得到这个结果。

使用mb_substr方法。