php htmlentitiesでエンティティを持つ文字を全てHTMLエンティティに変換する

  • 作成日 2020.12.08
  • 更新日 2022.03.05
  • php
php htmlentitiesでエンティティを持つ文字を全てHTMLエンティティに変換する

phpで、htmlentitiesを使用して、エンティティを持つ文字を全てHTMLエンティティに変換するサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Linux release 8.0.1905 (Core)
  • php 8.0.0
  • nginx 1.14.1

htmlentities使い方

htmlentitiesを使用すれば、エンティティを持つ文字を全てHTMLエンティティに変換することが可能です。

$result = htmlentities(
文字列,
変換する種類 デフォルト:ENT_COMPAT | ENT_HTML401,
エンコード デフォルト:ini_get("default_charset"),
既存のhtmlエンティティをエンコードするか:デフォルト TRUE);

使用できる第二引数は以下となります。

  • ENT_COMPAT : ダブルクォートを含めシングルクォートは含めない
  • ENT_QUOTES : ダブルクォートとシングルクォートの両方を含める
  • ENT_NOQUOTES : ダブルクォートとシングルクォートの両方を含めない
  • ENT_IGNORE : 基本使用しない。無効な符号単位シーケンスを含む文字列を渡した場合に、 空の文字列を返すのではなく無効な部分を切り捨てる。
  • ENT_SUBSTITUTE : 無効な符号単位シーケンスを含む文字列を渡した場合に、 空の文字列を返すのではなく Unicode の置換文字に置き換えられる。 UTF-8 の場合は U+FFFD、それ以外の場合は &#FFFD; となります。
  • ENT_DISALLOWED : 指定した文書型において無効な符号位置を、Unicode の代替文字である U+FFFD (UTF-8) あるいは &#FFFD; で置き換えられる。 これを設定しなければ、無効な符号位置をそのまま残る。
  • ENT_XML1 : XML 1
  • ENT_XHTML : XHTML
  • ENT_HTML5 : HTML 5

以下は、エンティティを持つ文字を全てHTMLエンティティに変換するサンプルコードとなります。

<?php

$str = "<a href=\"https://mebee.info/\">link</a>";

$result = htmlentities($str);

print_r($result); // &lt;a href=&quot;https://mebee.info/&quot;&gt;link&lt;/a&gt;

元のhtmlに戻す場合は、html_entity_decodeを使用します。

<?php

$str = "&lt;a href=&quot;https://mebee.info/&quot;&gt;link&lt;/a&gt;";

$result = html_entity_decode($str);

print_r($result); // <a href="https://mebee.info/">link</a>

また「&amp;」を変換した場合「&」が「&amp;」に変換されて「&amp;amp;」となるので、

<?php

$str = "&amp;";

$result = htmlentities($str);

print_r($result); // &amp;amp;

第四引数を「false」に指定することにより「&amp;」と表示されます。

<?php

$str = "&";

$result = htmlentities($str, ENT_COMPAT | ENT_HTML401,ini_get("default_charset"),false);

print_r($result); // &