<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// このドキュメントは、よりよく使用する方法を示しています mb_encode_numericentity マッチ htmlentities 文字エンコーディング処理を実行します</span></span><span>
</span><span><span class="hljs-comment">// のために PHP 環境でマルチバイト文字を処理するときに、文字化けのコードや情報の損失を避けてください</span></span><span>
</span><span><span class="hljs-comment">// ----------------------------</span></span><span>
<span class="hljs-comment">/**
* それをよりよく使用する方法 mb_encode_numericentity マッチ htmlentities 文字エンコーディング処理を実行します?
*
* 処理には、非処理が含まれます ASCII 文字の多言語コンテンツ(中国語のように、日本語、韓国語など)時間,PHP の `htmlentities` 函数常のために将特殊キャラクター转换为 HTML 実在物,避けるため XSS セキュリティの問題。
* しかし,`htmlentities` 对多字节キャラクターの支持有限,特に文字セットが設定されている場合 UTF-8 時間,1つ部の文字は、直接無視されたり、不完全に逃げたりする場合があります。
*
* この問題を解決するために,`mb_encode_numericentity` 協力できます `htmlentities` 使用,しません ASCII キャラクター先转换为数字実在物,統1つされた方法でそれを実施します HTML 逃げる。
* 実用的な例を通してこのプロセスを説明しましょう。
*
* 1つ、基本的な使用例
*/</span>
</span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-string">"こんにちは,世界!<script>alert('XSS');</script>"</span></span><span>;
</span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-string">'UTF-8'</span></span><span>;
</span><span><span class="hljs-comment">// 定义実在物转换範囲(0x80 到着 0xFFFF すべての非を示します ASCII キャラクター)</span></span><span>
</span><span><span class="hljs-variable">$convmap</span></span><span> = [</span><span><span class="hljs-number">0x80</span></span><span>, </span><span><span class="hljs-number">0xffff</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0xffff</span></span><span>];
</span><span><span class="hljs-comment">// 第1つ步:しません ASCII キャラクター转换为数字実在物</span></span><span>
</span><span><span class="hljs-variable">$numericEntity</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_encode_numericentity</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, </span><span><span class="hljs-variable">$convmap</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-comment">// ステップ2:将剩余内容逃げる为 HTML 実在物(のように < > & シンボル)</span></span><span>
</span><span><span class="hljs-variable">$escapedOutput</span></span><span> = </span><span><span class="hljs-title function_ invoke__">htmlentities</span></span><span>(</span><span><span class="hljs-variable">$numericEntity</span></span><span>, ENT_QUOTES | ENT_HTML5, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$escapedOutput</span></span><span>;
<span class="hljs-comment">/**
* 出力の結果はに似ています:
* &#20320;&#22909;&#65292;&#19990;&#30028;&#65281;&lt;script&gt;alert(&#039;XSS&#039;);&lt;/script&gt;
*
* 見える,“こんにちは,世界!” 中の中文キャラクター已被转换为十进制 HTML 実在物,而脚本标签そして引号等特殊キャラクター也被成功逃げる。
*
* 二、なぜこれをするのですか?
*
* - **互換性の向上**:htmlentities 在遇到着非 ISO-8859-1 编码キャラクター時間行为不1つ,協力します mb_encode_numericentity 可确保所有キャラクター都被显式处理;
* - **安全性を向上させます**:XSS 多くの場合、攻撃が注入されます HTML タグまたは JavaScript 達成するために,提前逃げる所有可疑キャラクター可大大降低风险;
* - **文字化けのコードは避けてください**:在输出到着网页、ログ、或数据库時間,多字节キャラクターのように果未正确逃げる可能被误解释,したがって、文字化けされたコードまたはデータの異常が発生します。
*
* 三つ、注意すべきこと
*
* 1. `mb_encode_numericentity` あること `htmlentities` **前に** 電話,そうでなければ、そうではありません ASCII キャラクター可能会被提前截断或忽略。
* 2. `convmap` の设置要覆盖目标キャラクターの Unicode 範囲,常用配置のように `[0x80, 0xffff, 0, 0xffff]` ほとんどをカバーするのに十分です UTF-8 キャラクター。
* 3. 処理されている場合 HTML コンテンツを入力します(例のように用户提交の富文本),建议協力します `html_entity_decode` そして `mb_decode_numericentity` 双方向のトランスコーディングを実現します。
*
* 4、結論
*
* 組み合わせて使用します `mb_encode_numericentity` そして `htmlentities` より安全になる可能性があります、可靠地处理多语言环境下のキャラクター编码问题。
* ユーザーの入力を処理します、動的テキスト、またはブラウザへの出力,强烈建议进行此类逃げる处理,以确保应用の稳定性そして安全性。
*/</span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>