PHP子字符串和渲染的HTML上的奇怪图标

Nov*_*ato 6 php string substring

我真的不知道为什么在西里尔字体上,substring用"?"替换一些字符

我的守则

$string1 = get_the_content();
$string = strip_tags($string1);
$stringcutted = substr($string,0,150);
$replacement = "...";
$final = substr($stringcutted, 0, -3).$replacement;
Run Code Online (Sandbox Code Playgroud)

看看它是如何在html上呈现的

奇怪的icon1 奇怪的icon2

有解决方案吗

Mar*_*eed 3

因为PHP的字符串函数是基于字节字符串的;他们不了解字符编码。因此,在 UTF-8 之类的情况下,一个字符可以占用多个字节,它不会按照您希望的方式工作:

\n\n
<?php \n $x = \'\xd0\x9f\xd0\xbe\xd0\xb4\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xbe\xd0\xb2\xd0\xbd\xd1\x8b\xd0\xb5 \xd0\xb2\xd0\xb5\xd1\x87\xd0\xb5\xd1\x80\xd0\xb0\';\n print(strlen($x)."\\n");        # 37, not 19\n print(substr($x,0,1)."\\n");    # \xef\xbf\xbd, not \xd0\x9f\n print(substr($x,0,2)."\\n");    # \xd0\x9f, not \xd0\x9f\xd0\xbe\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您想操作非 ASCII 文本,请查看多字节字符串函数。

\n