【问题标题】:PHP: Special char becomes question mark icon in substringPHP:特殊字符成为子字符串中的问号图标
【发布时间】:2016-01-23 09:44:10
【问题描述】:

我的子字符串函数有问题。当特殊字符是生成的子字符串的最后一个字符时(并且只有那个字符!!!),这个字符被表示为一个带有问号的图标。

我的代码来了:

$string = 'This is a string and when a German word with a special char like "Tür" appears and the special char ü is the last character of the substring it gets represented as an icon with question mark';
echo substr($string,0,102). "...";

结果:

这是一个字符串,当一个带有特殊字符的德语单词,如“Tür” 出现和特殊字符... ...

我怎样才能避免这种情况?

【问题讨论】:

    标签: php utf-8 substr


    【解决方案1】:

    听起来您正在使用 8 位字符串函数来处理 unicode 字符。那是行不通的。

    您应该安装mbstring 包并在您的php 配置中启用“mbstring 函数重载”。这将注意以静默方式覆盖所有相关的字符串处理函数,以使用它们的多字节安全等效项,这样您就不必更改代码。

    “mbstring”扩展有许多配置选项。检查您的php.ini 配置文件并查看它们。您会发现mbstring.func_overload 命令您可能希望将其设置为值7,以便所有 此类函数被覆盖。更改该配置后,您必须重新启动 http 服务器进程,以便加载新配置。您还可以通过在测试脚本中使用著名的phpinfo() 函数来检查。

    另一种方法是不配置此覆盖​​的自动魔术,而是手动移植您的代码以直接使用这些功能。为此,您必须将代码中的 all 字符串函数调用替换为等效的函数名称。例如mb_substr(...) 而不仅仅是substr(...)

    您也真的想开始阅读您使用的工具的文档。这里对那些“多字节字符串”函数的介绍很有趣。它应该可以帮助您了解这一切是关于什么以及您必须注意什么:http://php.net/manual/en/book.mbstring.php

    【讨论】:

      【解决方案2】:

      您应该使用mb_substr 函数。

      【讨论】:

        猜你喜欢
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        • 2012-09-05
        • 2015-08-16
        • 2016-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多