PHPのHTMLエンティティに関する質問です。

「htmlentities」と「htmlspecialchars」の具体的な使い方の違いについて教えて下さい。
マニュアルを読む限りでは、適用される対象文字が異なるように見受けられました。
セキュリティを考慮してプログラミングする際、どちらを利用すべきだと皆さんはお考えですか?

≪マニュアルから引用≫
htmlentities -- 適用可能な文字を全てHTMLエンティティに変換する
htmlspecialchars -- 特殊文字を HTML エンティティに変換する

回答の条件
  • 1人2回まで
  • 登録:2006/08/31 17:57:40
  • 終了:2006/08/31 19:01:00

回答(2件)

id:aiaina No.1

aiaina回答回数8179ベストアンサー獲得回数1312006/08/31 18:01:57

ポイント35pt

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1795504

こちら参考になりそうです^^

id:lg-tsp

ご回答どうもありがとうございます。

単純に、「htmlentities」の方が、適用範囲が広いだけみたいですね。

そこで、結局このような形でセキュリティ対応し、対応を終えました。

/**

* HTML Entities

*/

function html($str) {

return htmlentities($str, ENT_QUOTES, mb_internal_encoding());

}

2006/08/31 18:58:31
id:takemori No.2

takemori回答回数29ベストアンサー獲得回数22006/08/31 18:52:43

ポイント35pt

htmlspecialcharsは以下の変更が行われます。

'&' (アンパサンド) は '&' になります。

ENT_NOQUOTESが設定されていない場合、'"' (ダブルクォート) は '"'になります。

ENT_QUOTESが設定されている場合のみ、''' (シングルクオート) は '''になります。

'<' (小なり) は '<' になります。

'>' (大なり) は '>' になります。


htmlentitiesは他の文字も変換されます。

データをDBやファイルに保存したりするときなどにhtmlentitiesが使われます。

htmlspecialcharsはHTMLタグを無効にするときなどに使われます。

  • id:kn1967
    &amp;のような表現による参照を実態参照と呼びますが、その種類は100ほどあります。
    [http://www.w3.org/TR/REC-html40/sgml/entities.html:title]

    htmlentitiesは全ての該当文字を実態参照形式に変えてしまいますが、htmlspecialcharsは&amp;/&quot;/&#039;/&lt;/&gt;の5つにしか対応していませんので、単純に”htmlspecialcharsはhtmlentitiesの機能限定版”と捕らえても大きな間違いではありません。

    変換対応範囲が多くなればなるほど開発時の動作確認が面倒になりますので、データベースへの格納などといったように、どうしても厳密にエスケープ処理したいという要求がなければ、一般にhtmlspecialcharsで十分です。

    せっかく書いたので、、、、、

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません