我有一个阿拉伯语的字符串,如:
على احمد يوسف
现在我需要剪切此字符串并将其输出为:
...على احمد يو
我试过这个功能:
function short_name($str, $limit) {
if ($limit < 3) {
$limit = 3;
}
if (strlen($str) > $limit) {
if (preg_match('/\p{Arabic}/u', $str)) {
return substr($str, 0, $limit - 3) . '...';
}
else {
return '...'.substr($str, 0, $limit - 3);
}
}
else {
return $str;
}
}
问题是有时它会在字符串的末尾显示这样的符号:
...�على احمد يو
为什么会这样?
答案 0 :(得分:1)
<强>答案:强>
return '...'.mb_substr($str, 0, $limit - 3, "UTF-8"); // UTF-8 is optional
<强>背景强>
在ISO 8859-1中,阿拉伯语不 8 位字符集。 substr()
调用内部libc函数,这些函数用于8位字符集。要显示高于255的字符(阿拉伯语,循环,韩语等),显示该字符需要更多位,例如16位或有时甚至32位。你减去3 * 8位,这将导致UTF-8中出现一些不可显示的字符。特别是如果您要使用大量多字节字符串,请确保使用正确的字符串函数,例如mb_strlen()