我的子字符串函数有问题。当一个特殊字符是结果子字符串的最后一个字符串(并且只有!!!)时,这个字符表示为带有问号的图标。
我的代码来了:
$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” 出现和特殊字符 ...
我该如何避免这种情况?
答案 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
功能。