2013-01-02 72 views
4

我用这种编码在我的网站上缩短我的推荐,完美的作品!但是现在我遇到了一个问题......我给了用户从他们自己的语言中添加他们的推荐信的机会。我的编码工作正常与英文字符,但不与其他语言的字符......任何人都可以告诉我为什么它是?字符串长度与其他语言不同......不是英语

<?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); 
    ?> 

任何意见,不胜感激。

谢谢。

回答

5

使用mb_*功能。在你的例子mb_strlenmb_substr

的原因是strlensubstr将计算是ASCII字符完全正常,但这样的结果显示不正确与strlensubstr一些Unicode字符分配多于一个字节字节。 mb_*功能完美地隐藏了这个问题,而它们对字符集进行计数,而不是字节数。

有关更多信息,请阅读手册。

编辑:


您可以使用str_word_count来算多少字字符串在那里,如果你在的话不是字符更感兴趣。

样品:

$str = 'Some long text Some long text Some long text Some long text Some long text Some long text'; 
echo str_word_count($str); 

注:如果您的目标语言有另一个分隔符比字的空间,您可以编写自定义函数,将计算该分隔符在给定的字符串的出现。

+0

但我的问题仍未解决。实际上,我需要在这里做一个长段转换为一个更多的链接到原来的一个。有没有一种方法来计算单词而不是字符......? – TNK

+0

@TharangaNuwan见编辑答案。 – Leri

+0

仍然有问题..我尝试使用僧伽罗语。像这样... $ sinhala ='තරංගනුවන්'变量只有两个单词..但是当我用str_word_count($ sinhala)输出给出的回应11.为什么? – TNK

4

查看文档中的注意事项:

注:

的strlen()返回的字节数,而不是 字符串中的字符数。

strlen()返回字节数,不是字符计数;这两个对于单字节字符集只是相同的。

使用mb_strlen()如果你想有一个多字节字符集字符串的字符长度,如UTF-8

+0

实际上,'strlen'是[binary-safe](http://en.wikipedia.org/wiki/Binary-safe):“二进制安全函数本质上是一种将输入视为未经特定格式的原始数据流的功能。“ – Gumbo

1

您的问题正在发生的事实,这对ASCII字符strlen的作品,是英语。另一种方法是mb_strlen。

这里是一个示例代码:

<?php 
$str = "Some user input こんにちわ"; 
$len = mb_strlen($str); 

这仅仅是一个示例来说明什么,我想说,但我希望它可以解决你的问题

相关问题