使用substr()
时,末尾会出现奇怪字符。
$articleText = substr($articleText,0,500);
жҲ‘жңүдёҖдёӘиҫ“еҮәеҢ…еҗ«500дёӘеӯ—з¬Ұе’ҢпҝҪ <--
еҰӮдҪ•и§ЈеҶіиҝҷдёӘй—®йўҳпјҹиҝҷжҳҜдёҖдёӘзј–з Ғй—®йўҳеҗ—пјҹжҲ‘зҡ„иҜӯиЁҖжҳҜеёҢи…ҠиҜӯгҖӮ
mb_*
函数之前添加 mb_internal_encoding("UTF-8");
。如果不添加它,我仍然会看到方块。 - ivkremermb_substr($short, 0, 75, 'utf-8')
,就不会看到方块了。这样你就不需要在 mb_substr
前使用 mb_internal_encoding
。 - trejdermb_*
命令之前使用 mb_internal_encoding('utf-8')
。 - trejder看起来你正在将Unicode字符切成两半。使用mb_substr
来进行Unicode安全的字符串切割。
mb_substr
时,可以在调用mb_internal_encoding('utf-8')
之前或使用'utf-8'
作为第四个参数。文档中指出这是可选的,如果省略,则将使用内部字符编码值,但问题是(在PHP文档的其他地方解释),PHP的“内部编码”几乎总是“其他东西”,而不是您的页面编码。因此,在切割UTF8字符串时,必须使用第四个参数或调用mb_internal_encoding('utf-8')
。 - trejderfunction substr_unicode($str, $s, $l = null) {
return join("", array_slice(
preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l));
}
mb_substr()
而不是substr()
。
< p > < strong > substr()
substr ( string $string , int $start [, int $length ] )
mb_substr()
mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )
有关 substr() 的更多信息 - 点此查看
UTF-8编码字符串的替代解决方案 - 在截取子字符串之前,将UTF-8转换为字符。
$articleText = substr(utf8_decode($articleText),0,500);
为了将articleText字符串转换回UTF-8,需要进行额外的操作:
$articleText = utf8_encode( substr(utf8_decode($articleText),0,500) );
ms_substr() 函数同样非常适用于删除奇怪的尾随换行符,这是我在解析 HTML 代码后遇到的问题。以下方法无法解决该问题:
trim()
或者:
var_dump(preg_match('/^\n|\n$/', $variable));
或者:
str_replace (array('\r\n', '\n', '\r'), ' ', $text)
不要捕获。