当我在 PHP 中使用 substr() 函数时,当最后一个字符是特殊字符(如 ë 或 ö 等)时,我会在字符串末尾得到一个问号(带问号的正方形 - 取决于浏览器) ...
$introtext = html_entity_decode($item->description, ENT_QUOTES, "UTF-8");
$introtext = substr($introtext, 0, 200);
我怎么能逃脱呢?
如果你的字符串有多字节编码(如 UTF-8),你应该使用它mb_substr
来避免这样的问题:
$introtext=mb_substr($introtext,0,200);
万一有人尝试了以前的答案,但它仍然不起作用:
尝试添加一个 Unicode 名称,mb_substr
如下所示:
$introtext = mb_substr($introtext, 0, 200, 'utf-8');
那是因为 substr 不适用于多字节字符。substr 可能会将多字节字符“减半”。您应该改用mb_substr。还要确保您的文件以 UTF-8 格式保存。
$introtext = mb_substr($introtext, 0, 200);
使用mb_substr
而不是substr
解决这样的问题,但mb_string
在您的PHP配置中启用该检查之前:
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');