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_strlenでは、mb_substr.

その理由は、strlensubstrは ASCII 文字には完全に問題なくバイトをカウントしますが、一部の Unicode 文字は複数のバイトを割り当てるため、 と では結果が正しくないように見えるstrlenからsubstrです。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);

注:ターゲット言語に単語のスペース以外の区切り文字がある場合は、指定された文字列でこの区切り文字の出現回数をカウントするカスタム関数を作成できます。

于 2013-01-02T13:20:22.350 に答える
4

ドキュメントの注を参照してください。

ノート:

strlen() は、文字列の文字数ではなくバイト数を返します。

strlen()は、文字数ではなくバイト数を返します。この 2 つは、1 バイト文字セットの場合のみ同じです。

UTF-8 などのマルチバイト文字セット文字列の文字長が必要な場合は、mb_strlen()を使用します。

于 2013-01-02T13:20:37.427 に答える
1

strlensubstr半角文字を想定しています。文字単位ではなく、バイト単位で動作します。

マルチバイト文字の場合は、対応するマルチバイト文字列mb_strlenおよびを使用する必要がありmb_substrます。これらは、さまざまな文字エンコーディングをサポートしています

于 2013-01-02T13:27:01.077 に答える
1

strlen が英語のASCII文字で機能するという事実に問題が発生しています。代替は mb_strlen です。

サンプルコードは次のとおりです。

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

これは私が言おうとしていることを説明するための単なるサンプルですが、問題が解決することを願っています

于 2013-01-02T13:20:50.383 に答える