5

我使用这种编码来缩短我网站上的推荐信,效果很好!但是现在我有一个问题......我让用户有机会使用他们自己的语言添加他们的推荐。我的编码适用于英文字符,但不适用于其他语言的字符....谁能告诉我为什么会这样????

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

4 回答 4

6

使用mb_*功能。在您的示例中mb_strlenmb_substr.

原因是strlenandsubstr将计算对 ASCII 字符非常合适的字节数,但某些 unicode 字符分配的字节数超过一个字节,因此结果与strlenand看起来不正确substrmb_*函数在计算字符集而不是字节数时完美地隐藏了这个问题。

如需更多信息,请阅读手册。

编辑:


如果您对单词比对字符更感兴趣,则可以使用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);

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

于 2013-01-02T13:20:22.350 回答
4

请参阅文档中的注释:

笔记:

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

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

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

于 2013-01-02T13:20:37.427 回答
1

您的问题是 strlen 适用于 ascii 字符,其中是英文。另一种方法是 mb_strlen。

这是一个示例代码:

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

这只是一个示例来说明我想说的,但我希望它可以解决您的问题

于 2013-01-02T13:20:50.383 回答
1

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

对于多字节字符,您应该使用对应的多字节字符串mb_strlenmb_substr. 它们支持多种字符编码

于 2013-01-02T13:27:01.077 回答