25

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

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

我怎么能逃脱呢?

4

5 回答 5

63

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

$introtext=mb_substr($introtext,0,200);
于 2011-06-06T20:47:00.203 回答
6

万一有人尝试了以前的答案,但它仍然不起作用:

尝试添加一个 Unicode 名称,mb_substr如下所示:

$introtext = mb_substr($introtext, 0, 200, 'utf-8');
于 2015-06-13T17:49:57.320 回答
5

使用mb_substr

于 2011-06-06T20:47:10.730 回答
5

那是因为 substr 不适用于多字节字符。substr 可能会将多字节字符“减半”。您应该改用mb_substr。还要确保您的文件以 UTF-8 格式保存。

$introtext = mb_substr($introtext, 0, 200);
于 2011-06-06T20:48:07.100 回答
0

使用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');
于 2021-10-22T13:47:41.050 回答