MB_DECODE_NUMERICALENTITY()はマルチバイト文字列処理関数( MBSTRing拡張機能によって提供)であり、その機能は、文字列のHTMLエンティティ数値( 'など)を対応する文字にデコードすることです。従来のHTML_ENTITY_DECODE()関数とは異なり、 MB_DECODE_NUMERICALENTITY()はより多くの文字セットをサポートし、マルチバイト文字のより良い処理をしています。
この関数のプロトタイプは次のとおりです。
<span><span><span class="hljs-title function_ invoke__">mb_decode_numericentity</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$map</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$encoding</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>
</span></span>
$文字列:デコードする文字列。
$マップ:デジタルエンティティをデコードする必要がある範囲を定義する配列。
$エンコード:文字エンコード( UTF-8やISO-8859-1など)を指定します。
次のように、HTMLエンティティをエンコードする文字列があるとします。
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"Hello &#20844;&#22909;!"</span></span><span>;
</span></span>
この文字列には、漢字「Hello」のHTMLエンティティエンコードが含まれています。次に、オリジナルの文字にデコードしたいと考えています。
<span><span><span class="hljs-comment">// デコードHTMLデジタルエンティティ</span></span><span>
</span><span><span class="hljs-variable">$decoded_str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_decode_numericentity</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span>(</span><span><span class="hljs-number">0x80</span></span><span>, </span><span><span class="hljs-number">0x10FFFF</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-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$decoded_str</span></span><span>; </span><span><span class="hljs-comment">// 出力: Hello こんにちは!</span></span><span>
</span></span>
この例では、 MB_DECODE_NUMERICALENTITY()関数を使用し、文字範囲配列[0x80、0x10ffff、0、0xffff]でパスを使用します。これは、すべての有効なユニコード文字範囲を表します。デコードされた文字列は「こんにちは!」です。 。
$ MAPパラメーターは、数値エンティティの範囲を定義します。 4つの要素の配列です。配列の形式は次のとおりです。
<span><span><span class="hljs-keyword">array</span></span><span>(</span><span><span class="hljs-variable">$from</span></span><span>, </span><span><span class="hljs-variable">$to</span></span><span>, </span><span><span class="hljs-variable">$from2</span></span><span>, </span><span><span class="hljs-variable">$to2</span></span><span>);
</span></span>
$ fromと$ :最初の範囲の開始値と終了値。
$ 2および$ to2 :2番目の範囲の開始値と終了値(ある場合)。
実際に使用すると、すべてのHTMLエンティティをデコードすることが一般的であるため、すべてのUnicode文字を上書きするために大きな文字範囲を使用できます。
MB_DECODE_NUMERICALENTITY()は複数の文字エンコーディングをサポートし、実際のニーズに応じて異なるエンコード形式を選択できます。アプリケーションが主に多言語環境を対象としている場合、すべての言語で文字セットを処理できるUTF-8エンコードを使用することをお勧めします。
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"&#20844;&#22909; &#12371;&#12395;&#12385;"</span></span><span>; </span><span><span class="hljs-comment">// こんにちは こんにちは</span></span><span>
</span><span><span class="hljs-variable">$decoded_str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_decode_numericentity</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span>(</span><span><span class="hljs-number">0x80</span></span><span>, </span><span><span class="hljs-number">0x10FFFF</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-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$decoded_str</span></span><span>; </span><span><span class="hljs-comment">// 出力: こんにちは こんにちは</span></span><span>
</span></span>
デジタルエンティティ( &#123;など)に加えて、HTMLエンティティも文字名( &lt;など)として表示できます。 MB_DECODE_NUMERICALENTITY()は主に数値エンティティを扱うために使用されますが、文字列に文字名のエンティティが含まれている場合、使用するにはhtml_entity_decode()関数を使用する必要があります。
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"Hello &lt;b&gt;World&lt;/b&gt;!"</span></span><span>;
</span><span><span class="hljs-variable">$decoded_str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">html_entity_decode</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$decoded_str</span></span><span>; </span><span><span class="hljs-comment">// 出力: Hello <b>World</b>!</span></span><span>
</span></span>
MB_DECODE_NUMERICALENTITY()にはMBSTRing拡張機能のサポートが必要なため、使用する前にMBSTRing拡張機能がPHP環境にインストールされ、有効になっていることを確認してください。
この関数は、主にデジタルエンティティをデコードするために使用され、文字名エンティティのデコードには他の方法が必要です。
文字エンコードは、文字列で実際に使用されるエンコードと一致する必要があります。そうしないと、文字化けコードが発生する可能性があります。
MB_DECODE_NUMERICALENTITY()は、特に特殊文字の文字列を扱う場合、非常に実用的なツールです。それを通して、HTMLデジタルエンティティを簡単にデコードして元の文字を復元できます。多言語サポートであろうと、変換をエンコードするHTMLエンティティであろうと、 MB_DECODE_NUMERICALENTITY()は、キャラクターデータを効果的に管理するのに役立ちます。
この機能を合理的に使用することにより、PHPアプリケーションの特殊文字を使用してデータをより適切に処理および表示し、ユーザーエクスペリエンスとシステムの安定性を向上させることができます。