• ベストアンサー

htmlentitiesとはエスケープ処理?

htmlentitiesとはエスケープ処理をするための関数なのでしょうか? string htmlentities ( string string, int [quote_style] , string [charset] ) この関数はhtmlspecialchars()と同じですが、 HTML エンティティと等価な意味を有する文字をHTMLエンティティに変換 します。

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5085/13292)
回答No.1

エスケープ処理の一種と思って構わないと思います。 htmlspecialchars とは変換対象とする文字の範囲が違うのと、オプションの指定の仕方で出力される結果が異なります。

okweb12345
質問者

お礼

htmlspecialchars とは変換対象とする文字の範囲が違うが、同じエスケープ処理を行っている所のみ共通している。 つまりエスケープ処理の一種という事ですね。 どちらを使うかどう区別するのですか?

関連するQ&A

  • HTMLタグを機能させて出力する際のエスケープ処理

    「HTMLタグを機能させて出力する」際のエスケープ処理は、どうすれば良いでしょうか? <例> ビューファイルの<head>タグ内に、下記のような文字列を渡して、実際に、タグとして機能させたい場合 <link rel="stylesheet" href="hoge.css"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> この場合、やり方としては、通常の文字列を渡すときのように、htmlspecialcharsで一旦「HTML エンティティに変換」した後、何らかの方法(htmlspecialchars_decode?)で元に戻すのでしょうか? それとも、「HTML エンティティに変換」した後、再変換してタグとして使うことが明白な場合は、わざわざ「HTML エンティティに変換」する必要はないのでしょうか? つまり、「HTMLタグを機能させて出力する」際のエスケープ処理は必要ない。やることと言えば、せいぜい、セッターで一旦、privateプロパティへ格納後、ゲッターで取り出すぐらい、なのでしょうか?

    • ベストアンサー
    • PHP
  • メタキャラクタのエスケープについて

    がんばって調べているんですが、わからないので質問します。 HTMLでのメタキャラクタ(「<」「>」「&」「"」など)を エスケープしたいんですが、うまくいきません。 試した内容は、こんな感じです。 Stringクラスのreplace(char oldChar, char newChar) を使えば、上手くいくかなと思ったのですが、文字列の 長さが変わってしまう為、使えませんでした。 1文字と1文字の変換だとうまく行くのですが、今回の 場合、1文字を4文字に変換したい為、使えません^^; < → &lt; 次に考えたのが、文字列のバッファの長さを増やせる Stringbufferクラスの replace(int start, int end, String str) だと、位置を指定しなければならなくて、どうやったら 良いのかわかりません。 みなさん、どのようにしているのでしょうか? 考え方、サンプルなどありましたら、アドバイスお願いします。

    • ベストアンサー
    • Java
  • 特殊文字をHTMLエンティティに変換する処理

    下記の処理とhtmlspecialchars関数との違いはなんですか? 2次元配列がよくわかりません。 function entity_assoc_array($assoc_array) { foreach ($assoc_array as $key => $value) { foreach ($value as $keys => $values) { // 特殊文字をHTMLエンティティに変換する $assoc_array[$key][$keys] = entity_str($values); } } return $assoc_array; }

    • ベストアンサー
    • PHP
  • エスケープ処理

    どうも初めまして。 switch文を用いてページを振り分けてますが、 この場合$_GETはhtmlspecialcharsでエスケープ処理するべきでしょうか?それともSQL構文が入力されることも考えられるのでmysql_real_escape_string()も使うべきなのでしょうか? ああ混乱してます><; どなたか、よろしくお願いします if(isset($_GET['page'])){ $page = $_GET['page']; }else{ $page = "home"; } switch ($page) { case 'home': require ("home.php"); break; ~同じようなのが複数~略 default: echo "ページが見つかりませんでした"; break; }

    • ベストアンサー
    • PHP
  • phpのXSS対策 どこに問題が?

    phpのXSS対策について質問があります。 あるphpの参考書に以下のような記述があったのですが、理解できません。↓ ---------------------------------------------------------------------------------- ただし、htmlspecialchars()関数でのエスケープ処理は「&」「<」「>」「"」「'」を文字参照に変換するものなので、これらの文字をまったく使わずにJavaScriptのコードを記載できる場所に変数を表示させるようなHTMLを書いてしまった場合は対策できません。 たとえば、以下のような場所に変数を表示する場合です。このようなコーディングをしてしまった場合は、htmlspecialchars()関数でのエスケープ処理はXSSを防ぐことはできません。このような場所に変数を書かないように注意してください。 <a href="<?php echo $input; ?>"> ---------------------------------------------------------------------------------- この記述を書いてしまうとなぜhtmlspecialchars()関数では防げないのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • HTMLエスケープ処理とデーターベース

    初歩的な事で申し訳ありませんがご教授下さい。 フォームから受け取った文字列をデータベースに格納し、必要に応じて出力するような処理でのHTMLエスケープについて質問です。 (前提条件として、HTMLタグは使用をさせない。フォームに入力する文字列には、< や >を使う必要性はほとんどないものとします) HTMLエスケープ処理は、どのタイミングで行うのが普通でしょうか? 1.JavaScliptで特定文字 < や > を入力させない。 2.サーバーサイドで特定文字 < や > を入力させない。 3.DBに格納する前にエスケープして、エスケープ処理後の文字列をDBに格納する。 4.DBにはそのまま格納し、出力のさいにエスケープ処理を行う。 5.どこでもかまわない。 6.その他 今まで私はあまり意識する事なく(4)を選択していたのですが、最近他の人の作ったプログラムを見る機会が増えて、その違いにちょっと気になりました。 正解はないのかも知れませんが、一般的な方法と、そのメリット、デメリット等、教えて頂けると助かります。

    • ベストアンサー
    • PHP
  • array_mapを使ったエスケープ処理

    MYSQLとPHPでアプリケーション作成している初心者です。 今まで一つ一つの項目をmysql_real_escape_stringに通していたのですが今日、array_mapという関数がある事を知りました。 今まで自分がやっていたように項目毎に data1 = mysql_real_escape_string($_POST['data1']); data2 = mysql_real_escape_string($_POST['data2']); ...(省略) とするのは項目が増えれば増えただけ作業量も増えてしまうので $postdata = array_map("エスケープ関数",$_POST); としてPOSTされたデータは一括してエスケープ用関数を通そうかと思っています。 参考書などでこのような方法でエスケープ処理をしているのを見た事が無いの不安なのですが(googleで調べると結構やっている人がいました)、このやり方で何かデメリットはあるでしょうか?

    • ベストアンサー
    • PHP
  • ASPからSQLserverのデータを更新する時のエスケープ処理

    ASPのプログラムから、SQL serverのデータを更新する時のSQL文で、エスケープ処理しなくてはいけない、文字(記号)とその処理方法を教えて下さい。 PHPだと、pg_escape_string()など、便利な関数があるようなのですが・・・。

  • 【javascriptのescape関数】

    【javascriptのescape関数】 javascriptとescape関数の説明に 「escape関数を用いると文字列をISO-Latin-1コードに変換してくれます。」 とあります。 ひらがなの「あ」は「%82%A0」となるらしいのですが、 (ブラウザごとに結果が異なり、自分が試したときはユニコードの「%u3042」へ変換されました) Latin1ってひらがなはあつかえないとおもってたのですがどういうことでしょうか。 ユニコードの「あ」の3042は符号化文字集合表に定義されているので理解できましたが、 latin1の表http://hp.vector.co.jp/authors/VA014833/HTML32/H … に「あ」は含まれないので理解できませんでした。 どなたかご教示ください。 以上宜しくお願い致します。

  • MYSQL 4.1 の余計なエスケープ処理

    おはようございます。PERL 5.8.5 からMYSQL4.1 サーバーへのデータINSERT 時の文字変換処理について教えてください。 MYSQL 4.1 の文字コードは次の通りです。 SHOW VARIABLES LIKE 'character?_set?_%'; の結果 character_set_client :binary character_set_connection:binary character_set_database:utf8 character_set_results:binary character_set_server:utf8 character_set_system:utf8 MYSQL 4.1 サーバーが上記のような状態で、PERL で次の処理をします。なお、PERL ソース自体はEUC で書かれています。 #!/usr/bin/perl use Jcode; use DBI; $string = "あああ"; Jcode::convert( ?$string, 'utf8', 'euc' ); $dbh = DBI->connect( 'DBI:mysql:DB名:ホスト名:3306', 'ユーザー名', 'パスワード' ,{AutoCommit => 0} ); $sth = $dbh->prepare( "set names utf8" ); $sth->execute; $sth->finish; $sth = $dbh->prepare( "insert into test values( ? )" ); $sth->bind_param( 1, $string ); $sth->execute; $sth->finish; $dbh->commit; $dbh->disconnect; 上記のソースを実行すると、MYSQL 4.1 サーバーには [あ?あ?あ] のような、余計なエスケープが掛かった状態で文字がINSERT されているのです。 私としては、set names utf8 で、MYSQL 4.1 サーバーとクライアントで同様の文字コードを使うようにしているので、MYSQL 4.1 における余計な文字コード変換はないものと思っています。余計な文字コード変換がないにもかかわらずエスケープ文字が入る理由が分かりません。 この現象についてお分かりの方がいらっしゃいましたら教えて頂きたく思います。なお、ネットでも調べたのですが、どの方も未解決でしたので質問さえて頂きました。 お願いします。