使用PHP的substr()在结尾使用特殊字符会导致问号

inb24sb2  于 2023-04-10  发布在  PHP
关注(0)|答案(6)|浏览(150)

当我在PHP中使用substr()函数时,当最后一个字符是一个特殊字符时,我会在字符串的末尾得到一个问号(一个带问号的正方形-取决于浏览器),比如ë或ö等。

$introtext = html_entity_decode($item->description, ENT_QUOTES, "UTF-8");
$introtext = substr($introtext, 0, 200);

我怎么能逃避呢?

ff29svar

ff29svar1#

如果你的字符串有多字节编码(如UTF-8),你应该使用mb_substr来避免这样的问题:

$introtext=mb_substr($introtext,0,200);
jyztefdp

jyztefdp2#

如果有人尝试了前面的答案,仍然不起作用:
尝试在mb_substr中添加Unicode名称,如:

$introtext = mb_substr($introtext, 0, 200, 'utf-8');
mhd8tkvw

mhd8tkvw4#

这是因为substr不适用于多字节字符。substr可能会将多字节字符“切成两半”。您应该使用mb_substr。还要确保您的文件以UTF-8保存。

$introtext = mb_substr($introtext, 0, 200);
093gszye

093gszye5#

使用mb_substr而不是substr来解决类似的问题,但在此之前,请检查您的PHP配置中是否启用了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');
a0x5cqrl

a0x5cqrl6#

以上都不对我起作用!我只是使用mb_strcut解决了这个问题!

$introtext = mb_strcut($stringWithOddCharacters, 0, 200);

相关问题