PHP:特殊字符在子字符串中成为问号图标

时间:2016-01-23 09:44:10

标签: php utf-8 substr

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

我的代码来了:

$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”   出现和特殊字符 ...

我该如何避免这种情况?

2 个答案:

答案 0 :(得分:0)

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

您应该安装mbstring包并启用" mbstring函数重载"在你的PHP配置中。这将注意默默地覆盖所有相关的字符串处理函数,以使用它们的多字节安全等价物,这样您就不必更改代码。

有很多配置选项可用于#34; mbstring"延期。检查您的php.ini配置文件并查看它们。您将找到mbstring.func_overload命令,您可能希望将其设置为值7,以便覆盖所有这样的函数。更改该配置后,您必须重新启动http服务器进程,以便加载新配置。您还可以通过在测试脚本中使用着名的phpinfo()函数来检查它。

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

此外,确实想要开始阅读您使用的工具的文档。这里介绍那些"多字节字符串"功能是有意义的。它应该有助于您了解这一切是什么以及您需要照顾的内容:http://php.net/manual/en/book.mbstring.php

答案 1 :(得分:0)

您应该使用mb_substr功能。