PHP函数substr()错误

时间:2009-12-29 09:06:26

标签: php substr

当我使用substr()时,我在最后得到一个奇怪的角色

$articleText = substr($articleText,0,500);

我有500个字符的输出和 < -

我该如何解决这个问题?这是编码问题吗?我的语言是希腊语。

7 个答案:

答案 0 :(得分:57)

substr使用字节计数,而不是字符。

greek可能意味着你正在使用一些多字节编码,比如UTF-8 - 并且每个字节的计数对那些来说并不是很好。

也许使用mb_substr可以提供帮助,这里:mb_*函数是专门为多字节编码创建的。

答案 1 :(得分:19)

使用mb_substr代替它,它能够处理多个编码,而不仅仅是单字节字符串substr

$articleText = mb_substr($articleText,0,500,'UTF-8');

答案 2 :(得分:6)

看起来你正在将一个unicode角色切成两半。使用mb_substr代替unicode-safe字符串切片。

答案 3 :(得分:1)

UTF-8编码字符串的替代解决方案 - 这会在切割子字符串之前将UTF-8转换为字符。

$articleText = substr(utf8_decode($articleText),0,500);

要将articleText字符串恢复为UTF-8,需要执行额外操作:

$articleText = utf8_encode( substr(utf8_decode($articleText),0,500) );

答案 4 :(得分:1)

使用此功能,它对我有用

function substr_unicode($str, $s, $l = null) {
    return join("", array_slice(
        preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l));
}

致谢:http://php.net/manual/en/function.mb-substr.php#107698

答案 5 :(得分:0)

ms_substr()也可以很好地删除奇怪的尾随换行符,这在解析html代码后遇到了麻烦。问题没有得到处理:

 trim() 

或:

 var_dump(preg_match('/^\n|\n$/', $variable));

或:

str_replace (array('\r\n', '\n', '\r'), ' ', $text)

不要抓住。

答案 6 :(得分:0)

你正在尝试削减unicode角色。所以我更喜欢而不是substr()在php中尝试mb_substr()

<强> SUBSTR()

substr ( string $string , int $start [, int $length ] )

<强> mb_substr()

mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )

有关substr() - Credits => Check Here

的更多信息