PHPで文字列を処理する場合、中国語、日本、韓国語などのマルチバイト文字が関与している場合、従来の文字列関数(サブストアなど)を使用すると、文字切り出エラーが発生しやすく、文字化された文字または不完全な文字が生じます。この問題を回避するために、PHPはマルチバイトストリングエクステンションMBSTringを提供します。2つの非常に実用的な機能はMB_GET_INFOとMB_SUBSTRです。
この記事では、例を使用して、これらの2つの機能を組み合わせてマルチバイト文字列を安全かつ正しく傍受する方法を説明します。
MB_GET_INFO()は、現在のマルチバイト環境構成情報を取得するために使用されます。それを通して、内部エンコーディングが現在使用されているものを知ることができ、したがって、文字列操作を実行するときにエンコーディングが一貫していることを保証します。
<?php
$info = mb_get_info();
echo "現在使用されているマルチバイトエンコードはです:" . $info['internal_encoding'];
?>
一般に、デフォルトの設定によって引き起こされる問題を回避するために、スクリプトの先頭にエンコードを明示的に設定することをお勧めします。
<?php
mb_internal_encoding('UTF-8'); // ASを設定します UTF-8
?>
MB_SUBSTR()は、 substr()のマルチバイトバージョンであり、文字列から指定された長さのサブストリングを傍受するために使用され、複数の文字エンコーディングをサポートし、文字が1つのサイズに誤っていないことを回避します。
構文は次のとおりです。
mb_substr(string $string, int $start, ?int $length = null, ?string $encoding = null): string
パラメーター説明:
$文字列:元の文字列
$ start :開始位置(0から開始)
$の長さ:オプションのインターセプトされた長さ
$エンコード:オプション、エンコードを指定します(明確に書き出すことをお勧めします)
概要として、UTF-8エンコードの中国の記事から最初の50文字をカットしたとします。
<?php
mb_internal_encoding('UTF-8'); // エンコーディングを特定します
$article = "PHP 広く使用されているオープンソースの多目的スクリプト言語です,特に適しています Web 開発および組み込み可能 HTML 真ん中。";
// インターセプトの前 50 文字
$summary = mb_substr($article, 0, 50);
echo "記事の概要:" . $summary;
?>
MB_Substrはバイトではなく文字で処理されるため、出力の結果は文字化けません。
たとえば、ユーザーがコメントを送信する場合、ディスプレイリストに最初の30文字のみを表示し、「フルテキストを読む」リンクを提供する必要があります。
<?php
mb_internal_encoding('UTF-8');
$comment = "これはユーザーが提出した非常にエキサイティングなコメントです,コンテンツの一部のみを表示したい。";
$preview = mb_substr($comment, 0, 30);
echo $preview . '... <a href="https://gitbox.net/full-comment.php?id=123">全文を読んでください</a>';
?>
これを行うと、ページが過度に長いコンテンツのために肥大化するのを防ぐだけでなく、文字の完全な表示も保証します。
GBK、BIG5などの他のエンコーディングを扱っている場合は、各MB_関数でエンコードパラメーターを明示的に指定することを忘れないでください。
MB_STRLEN()を組み合わせて使用して、インターセプトする前に必要かどうかを判断することもできます(たとえば、20文字しかない場合、30を傍受する必要はありません)。
HTML環境でインターセプトされたコンテンツを出力する場合、XSSの問題を回避するために脱出するように注意する必要があります。