【问题标题】:How to Truncate a word which is having unicode characters without breaking the unicode?如何在不破坏 unicode 的情况下截断具有 unicode 字符的单词?
【发布时间】:2013-05-24 07:31:34
【问题描述】:

我有一个像“Stefan Äöüéèêë”这样的词。我想在 20 个字符后截断这个字符串……但它给了我 Stefan Äöüéèê� 一样的感觉。 我为此使用以下代码。

$string = "Stefan Äöüéèêë";
if(strlen($string) > 20){
       $string = substr($string, 0, 20) . '...';      
}

如何获得安全截断的字符串。

【问题讨论】:

    标签: php utf-8 unicode-string


    【解决方案1】:

    使用它的多字节版本: http://php.net/manual/de/function.mb-substr.php

    这里还有一个非常方便的 unicode 不安全方法列表:http://www.phpwact.org/php/i18n/utf-8

    注意:strlen 确实返回了错误的值

    【讨论】:

    • @samuel 如果你在 utf8_decode 之后找到长度,那么它会给出正确的结果:)
    【解决方案2】:

    试试这个朋友,如果你解码字符串,那么它会给出适当长度的字符串。

    $string = "Stefan Äöüéèêë";
    $string= utf8_decode($string);
    echo strlen($string);
    if(strlen($string) > 10){
        $string = mb_substr($string, 0, 10);   
    }
    echo $string;
    

    【讨论】:

    • 只有你不能使用strlen(),因为它给你的是字节总数,而不是字符。请改用mb_strlen()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2011-08-27
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多