【问题标题】:Get first character of UTF-8 string获取 UTF-8 字符串的第一个字符
【发布时间】:2012-11-10 15:06:27
【问题描述】:

我从 db 得到一个 UTF-8 字符串,并试图回显它的第一个字符:

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

我得到:

怎么了?

【问题讨论】:

    标签: php yii


    【解决方案1】:
    $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" />
    

    【讨论】:

    • echo mb_substr($title, 0, 1);结果:
    • 你能把完整的字符串贴在这里吗?
    • 另外,您是否在 HTML 中使用了正确的编码?
    • INSERT INTO li_directory (id, title, text, examples, time) 值 (1, 'Акраверш', '', 132170895跨度>
    • $title="Акраверш"; echo mb_substr($title, 0, 1,'UTF-16');
    【解决方案2】:

    您需要考虑几件事:

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

    【讨论】:

    • ...正如其他两个答案中提到的,您应该使用'mb_substr'
    • 这对我也很有用。谢谢。
    • 我知道这已经过时了,但这个问题今天仍然存在。据我所知,如果您仍然使用数组表示法$title[0],那么做所有这些都不会解决任何问题。 @PaulS 说“你应该使用mb_substr”,但有人可以确认你必须使用mb_substr吗?如果是这样,我们不应该编辑这个公认的答案来添加这个关键点吗?
    • @Niavlys 我可以确认。这个答案并不能解决实际问题。
    【解决方案3】:

    正如前面在其他问题中提到的,使用 PHP 时,当尝试获取子字符串时,它不理解多字节字符(例如,您使用 UTF8 时)。

    其他答案没有提到的是你应该提示你想用于 mb_substr 的编码

    所以,例如,我使用这个:

     mb_substr( "Sunday", 0, 1,'UTF8'); // Returns S
     mb_substr( "воскресенье", 0, 1,'UTF8'); // Returns в
    

    【讨论】:

    • 没有 'UTF8' 参数对我不起作用。谢谢!
    • 注意:如果省略编码参数,则使用的编码是mb_internal_encoding 返回的任何编码。
    【解决方案4】:

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

    使用mb_substr 方法。

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多