当我在PHP中使用substr()函数时,当最后一个字符是一个特殊字符时,我会在字符串的末尾得到一个问号(一个带问号的正方形-取决于浏览器),比如ë或ö等。
$introtext = html_entity_decode($item->description, ENT_QUOTES, "UTF-8"); $introtext = substr($introtext, 0, 200);
我怎么能逃避呢?
ff29svar1#
如果你的字符串有多字节编码(如UTF-8),你应该使用mb_substr来避免这样的问题:
mb_substr
$introtext=mb_substr($introtext,0,200);
jyztefdp2#
如果有人尝试了前面的答案,仍然不起作用:尝试在mb_substr中添加Unicode名称,如:
$introtext = mb_substr($introtext, 0, 200, 'utf-8');
n1bvdmb63#
使用mb_substr
mhd8tkvw4#
这是因为substr不适用于多字节字符。substr可能会将多字节字符“切成两半”。您应该使用mb_substr。还要确保您的文件以UTF-8保存。
$introtext = mb_substr($introtext, 0, 200);
093gszye5#
使用mb_substr而不是substr来解决类似的问题,但在此之前,请检查您的PHP配置中是否启用了mb_string:
substr
mb_string
php -i | grep mbstring
它会显示mb_string是否已启用。如果没有,您可以通过以下方式安装:(适用于PHP 8.0)
sudo apt-get install php8.0-mbstring
现在你可以像这样使用mb_substr:mb_substr(string $string,int $start,int $length,string $encoding):弦
$introtext = mb_substr($introtext, 0, 200, 'UTF-8');
a0x5cqrl6#
以上都不对我起作用!我只是使用mb_strcut解决了这个问题!
$introtext = mb_strcut($stringWithOddCharacters, 0, 200);
6条答案
按热度按时间ff29svar1#
如果你的字符串有多字节编码(如UTF-8),你应该使用
mb_substr
来避免这样的问题:jyztefdp2#
如果有人尝试了前面的答案,仍然不起作用:
尝试在
mb_substr
中添加Unicode名称,如:n1bvdmb63#
使用mb_substr
mhd8tkvw4#
这是因为substr不适用于多字节字符。substr可能会将多字节字符“切成两半”。您应该使用mb_substr。还要确保您的文件以UTF-8保存。
093gszye5#
使用
mb_substr
而不是substr
来解决类似的问题,但在此之前,请检查您的PHP配置中是否启用了mb_string
:它会显示
mb_string
是否已启用。如果没有,您可以通过以下方式安装:(适用于PHP 8.0)现在你可以像这样使用mb_substr:
mb_substr(string $string,int $start,int $length,string $encoding):弦
a0x5cqrl6#
以上都不对我起作用!我只是使用mb_strcut解决了这个问题!