6

文字列の最初の20文字にアクセスするためにsubstrメソッドを使用しています。通常の状況では正常に動作しますが、rtl言語(utf8)で作業していると、間違った結果が返されます(約10文字が表示されます)。Webを検索しましたが、この問題を解決するのにn番目が役立つことがわかりました。これは私のコード行です:

substr($article['CBody'],0,20);

前もって感謝します。

4

2 に答える 2

12

UTF-8としてエンコードされた文字列を使用している場合、PHP substr関数を使用して文字列の一部を取得しようとすると、文字が失われる可能性があります。これは、UTF-8文字が1バイトに制限されておらず、Unicode文字に一致する1〜4バイトの可変長であるために発生します。

mb_substr()を使用できます。これは、substrとほぼ同じように機能しますが、違いは、新しいパラメーターを追加して、エンコードの種類を指定できることですUTF-8

これを試して:

$str = mb_substr($article['CBody'], 0, 20, 'UTF-8');

echo utf8_decode($str); 

お役に立てれば。

于 2013-02-09T06:50:20.397 に答える
0

代わりにこれを使用してください。本文を十分に長くするための追加のテキストがあります。これはマルチバイト文字を処理します。 http://php.net/manual/en/function.mb-substr.php

于 2013-02-09T06:48:27.710 に答える