我使用此编码缩短了我在我网站上的推荐,效果非常好!但现在我遇到了一个问题......我给了用户用他们自己的语言添加他们的推荐书的机会。我的编码与英文字符正常工作,但与其他语言的字符不一致....任何人都可以告诉我为什么它是????
<?php
$echo = $getFig["news_content"];
if(strlen($echo) <= 100){
$bar = $echo;
}if(strlen($echo) > 100){
$bar = substr($echo, 0, 101 )."<ahref='#'>Read More...</a>";
}
echo htmlspecialchars($bar);
?>
非常感谢任何评论。
谢谢。
答案 0 :(得分:6)
使用mb_*
个函数。在您的示例中mb_strlen
和mb_substr
。
原因是strlen
和substr
将计算完全适合ASCII字符的字节,但是一些unicode字符分配多个字节,因此strlen
和{{{}} { {1}}。 substr
函数在计算字符集时完全隐藏了这个问题,而不是字节数。
有关详细信息,请阅读手册。
修改强>
如果您对单词感兴趣而不是字符感兴趣,可以使用str_word_count
来计算字符串中有多少单词。
样品:
mb_*
注意:如果您的目标语言有另一个分隔符而不是单词的空格,您可以编写自定义函数来计算给定字符串中此分隔符的出现次数。
答案 1 :(得分:4)
请参阅文档中的注释:
注意:
strlen()返回字节数而不是数字 字符串中的字符。
strlen()返回字节数,而不是字符数;对于单字节字符集,两者只是相同。
如果您想要多字节字符集字符串(如UTF-8)的字符长度,请使用mb_strlen()
答案 2 :(得分:1)
你的问题是因为strlen适用于ascii字符,其中包括英文字符。另一种选择是mb_strlen。
以下是示例代码:
<?php
$str = "Some user input こんにちわ";
$len = mb_strlen($str);
这只是一个示例,用于说明我想说的内容,但我希望它能解决您的问题
答案 3 :(得分:1)
strlen
和substr
假设单字节字符。他们宁愿以字节为基础而不是基于字符。
对于多字节字符,您应该使用multi-byte string对应的mb_strlen
和mb_substr
。 They support a variety of character encodings