【问题标题】:substr doesn't work fine with utf8substr 不适用于 utf8
【发布时间】:2013-02-09 06:45:36
【问题描述】:

我正在使用 substr 方法来访问字符串的前 20 个字符。它在正常情况下工作正常,但在使用 rtl 语言(utf8)时,它给了我错误的结果(显示了大约 10 个字符)。我在网上搜索过,但发现对解决这个问题很有用。这是我的代码行:

substr($article['CBody'],0,20);

提前致谢。

【问题讨论】:

    标签: php mysql utf-8 right-to-left substr


    【解决方案1】:

    如果您使用编码为 UTF-8 的字符串,您可能会丢失 当您尝试使用 PHP substr 获取其中的一部分时的字符 功能。发生这种情况是因为在 UTF-8 中字符不受限制 到一个字节,它们具有可变长度以匹配 Unicode 字符, 在 1 到 4 个字节之间。

    您可以使用mb_substr(),它的工作方式几乎与substr相同,但不同之处在于您可以添加一个新参数来指定编码类型,无论是UTF-8还是不同的编码。

    试试这个:

    $str = mb_substr($article['CBody'], 0, 20, 'UTF-8');
    
    echo utf8_decode($str); 
    

    希望这会有所帮助。

    【讨论】:

    • 哇,它对我有用。我真的很感激,我搜索了大约 3 个小时。再次感谢:)
    【解决方案2】:

    改用这个,这里有额外的文本来使正文足够长。这将处理多字节字符。 http://php.net/manual/en/function.mb-substr.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多