dtl19910708
2012-01-31 21:52
浏览 1.2k
已采纳

带有utf-8的php substr()函数在最后留下�标记

Here is simple code

<?php

$var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных        продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта.";

$foo = substr($var,0,142);

echo $foo;
?>

and it outputs something like this:

Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продук�...

I tried mb_substr() with no luck. How to do this the right way?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • douoyou3348 2012-01-31 21:57
    已采纳

    The comments above are correct so long as you have mbstring enabled on your server.

    $var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных        продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта.";
    
    $foo = mb_substr($var,0,142, "utf-8");
    

    Here's the php docs:

    http://php.net/manual/en/book.mbstring.php

    已采纳该答案
    打赏 评论
  • dongmu1989 2012-01-31 21:56

    PHP5 does not understand UTF-8 natively. It is proposed for PHP6, if it ever comes out.

    Use the multibyte string functions to manipulate UTF-8 strings safely.

    For instance, mb_substr() in your case.

    打赏 评论
  • douji6896 2014-08-15 07:29

    A proper (logical) alternative for unicode strings;

    <?php
    function substr_unicode($str, $s, $l = null) {
        return join("", array_slice(
            preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l));
    }
    
    $str = "Büyük";
    $s = 0; // start from "0" (nth) char
    $l = 3; // get "3" chars
    echo substr($str, $s, $l) ."
    ";    // Bü
    echo mb_substr($str, $s, $l) ."
    "; // Bü
    echo substr_unicode($str, $s, $l);  // Büy
    ?>
    

    Use the PHP: mb_substr - Manual

    打赏 评论
  • ds211107 2014-09-26 23:01

    Never use constant in substr function for UTF-8 string: $st = substr($text, $beg, 100); 50% chance you will get half of a character at end of string)

    Do like this:

    $postion_degin = strpos($text, $first_symbol);
    $postion_end = strpos($text, $last_symbol);
    $len = $postion_end - $postion_degin +1;
    $st = substr($text, $postion_degin, $len);
    

    100% result

    No mb_substr

    打赏 评论
  • dongqiao3833 2017-09-09 21:15

    I hope this solution help you as it helped me a lot.

    <?php
    if(mb_strlen($post->post_content,'UTF-8')>200){
        $content= str_replace('
    ', '', mb_substr(strip_tags($post-> post_content), 
                              0, 200,'UTF-8'));
        echo $content.'…';
    }else{
        echo str_replace('
    ', '', strip_tags($post->post_content));
    }
    ?>
    
    打赏 评论
  • douzhu7507 2018-08-04 19:59

    If your strings may contain Unicode (multi-byte) characters and you don’t want to break these, replace substr with one of the following two, depending on what you want:

    Limit to 142 characters:

    mb_substr($var, 0, 142);
    

    Limit to 142 bytes:

    mb_strcut($var, 0, 142);
    
    打赏 评论
  • douquejituan938904 2019-03-21 10:02

    If you want to use strlen function, to calculate length of string, which you want to return and your string $word has UTF-8 encoding, you have to use mb_strlen() function:

    $foo = mb_substr($word, 0, mb_strlen($word)-1);

    打赏 评论

相关推荐 更多相似问题