切一根阿拉伯字符串

时间:2015-09-20 14:20:41

标签: php

我有一个阿拉伯语的字符串,如:

على احمد يوسف

现在我需要剪切此字符串并将其输出为:

...على احمد يو

我试过这个功能:

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;
    }
}

问题是有时它会在字符串的末尾显示这样的符号:

...�على احمد يو

为什么会这样?

1 个答案:

答案 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()