2016-01-23 120 views
0

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

这里说到我的代码:

$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). "..."; 

结果:

这是一个字符串,当一个德语单词包含“TUR” 出现和特殊字符特殊字符..

我该如何避免这种情况?

+0

使用'mb_substr' – Rein

回答

0

听起来像你正在使用8位字符串函数来处理Unicode字符。这是行不通的。

你应该安装mbstring包,并在你的php配置中启用“mbstring function overloading”。这会小心地默认覆盖所有相关的字符串处理函数,以使用它们的多字节安全等价物,以便您不必更改代码。

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

另一种方法是不配置此重写automagic,而是手动移植代码以直接使用这些函数。为此,您将不得不用代码中的全部字符串函数调用其等价函数名称。因此,例如mb_substr(...)而不是只有substr(...)

另外你真的想开始阅读你使用的工具的文档。这里对这些“多字节字符串”函数的介绍很感兴趣。它应该有助于你理解这一切是什么以及你需要照顾的:http://php.net/manual/en/book.mbstring.php

0

你应该使用mb_substr函数。