当我使用substr()
时,我在最后得到一个奇怪的角色
$articleText = substr($articleText,0,500);
我有500个字符的输出和 < -
我该如何解决这个问题?这是编码问题吗?我的语言是希腊语。
答案 0 :(得分:57)
substr
使用字节计数,而不是字符。
greek可能意味着你正在使用一些多字节编码,比如UTF-8 - 并且每个字节的计数对那些来说并不是很好。
答案 1 :(得分:19)
答案 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));
}
答案 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
的更多信息