字符串长度与其他语言不同...不是英文

时间:2013-01-02 13:18:10

标签: php

我使用此编码缩短了我在我网站上的推荐,效果非常好!但现在我遇到了一个问题......我给了用户用他们自己的语言添加他们的推荐书的机会。我的编码与英文字符正常工作,但与其他语言的字符不一致....任何人都可以告诉我为什么它是????

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

非常感谢任何评论。

谢谢。

4 个答案:

答案 0 :(得分:6)

使用mb_*个函数。在您的示例中mb_strlenmb_substr

原因是strlensubstr将计算完全适合ASCII字符的字节,但是一些unicode字符分配多个字节,因此strlen和{{{}} { {1}}。 substr函数在计算字符集时完全隐藏了这个问题,而不是字节数。

有关详细信息,请阅读手册。

修改


如果您对单词感兴趣而不是字符感兴趣,可以使用str_word_count来计算字符串中有多少单词。

样品:

mb_*

注意:如果您的目标语言有另一个分隔符而不是单词的空格,您可以编写自定义函数来计算给定字符串中此分隔符的出现次数。

答案 1 :(得分:4)

请参阅文档中的注释:

  

注意:

     

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

strlen()返回字节数,而不是字符数;对于单字节字符集,两者只是相同。

如果您想要多字节字符集字符串(如UTF-8)的字符长度,请使用mb_strlen()

答案 2 :(得分:1)

你的问题是因为s​​trlen适用于ascii字符,其中包括英文字符。另一种选择是mb_strlen。

以下是示例代码:

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

这只是一个示例,用于说明我想说的内容,但我希望它能解决您的问题

答案 3 :(得分:1)

strlensubstr假设单字节字符。他们宁愿以字节为基础而不是基于字符。

对于多字节字符,您应该使用multi-byte string对应的mb_strlenmb_substrThey support a variety of character encodings