PHP は、指定された文字列が最初に出現した時点で中国語の文字列をインターセプトし、100 文字をインターセプトします。
前述のように、次の 2 つの方法でインターセプトを実行しましたが、結果が間違っていることがわかりました。アドバイスをお願いします。
$word はインターセプトされる文字列、$key_word は指定された部分文字列です
方法 1:
PHP コード
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
mb_substr($word,strpos($word,$key_word)/3,100,'utf-8');
ログイン後にコピー
方法 2 :
PHP コード
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
$start_key = mb_strpos($word,$key_word);
$start_key = $start_key>0?$start_key:0;
mb_substr($word,$start_key,100,'utf-8');
ログイン後にコピー
-----解決策-------文字幅をインターセプトする非常に便利な関数 mb_strimwidth($str, 0, 80, '', 'utf8') を見つけました
------解決策----------------------汗っかき、汗っかきな人コーディングを理解する 書かれたコードは本当に煩わしいものです。
覚えておいてください、strstr/strpos はバイトごとの比較に使用されます。 GBK/UTF8 の場合、GBK/UTF8 の非 ASCII 文字の 1 バイトの 7 番目のビットが 1 であるため、特定の状況下でも正常に動作しますが、GBK コードでは 2 つの 2 バイト文字が含まれるため問題が発生しやすくなります。バイトのスペルが不正確な一致を引き起こす可能性があります。
MB はエンコーディングを認識する関数であるため、渡される数値と返される数値はバイト数ではなく文字数です。
最初のコードで strpos を使用しましたが、utf8 エンコーディングが OK であれば、正直に言うと残りは機能しません。 UTF8 のことは忘れてください。文字はすべて 3 バイトであると仮定します。 。 。これは間違いです。
2 番目のコードははるかに信頼性が高くなりますが、mb_strpos にエンコーディングを指示しなかったのは残念なので、これで終わりです。
------解決策---------mb_string 関数グループはこの方法では使用されません
mb_internal_encoding("utf-8");
mb_substr($word, mb_strpos($word, $key_word), 100);
------解決策---------PHP コード
//文字列インターセプト。すべての文字の長さは 1 で、gbk と utf-8 に共通です。
関数カット($str, $len = 12, $dot = '...') {
if (mb_strlen($str, "utf-8")
ログイン後にコピー