出力時のエンティティについて

このQ&Aのポイント
  • フォーム入力時のエンティティ回避方法としてpreg_matchを使用し、htmlspecialcharsを利用する方法について質問しています。
  • メールアドレスなど特定の文字をエンティティ化する方法について、htmlentitiesとhtmlspecialcharsの違いを調べ試行錯誤しています。
  • コードの部分でhtmlspecialcharsを使用するが変換されない問題が発生しており、設置方法や利用する関数についてアドバイスを求めています。
回答を見る
  • ベストアンサー

出力時のエンティティについて

お世話になっております。 先日、フォームへ入力する際、使って欲しくない文字をpreg_matchを使うことで回避する事を教えていただきましたが、その際、二重防衛?として出力したとき、htmlspecialcharsを利用するとの事もお教えいただいたのですが、メールアドレスなどの@をエンティティするのはhtmlentitiesとの事なので、試にと、以下のようなコードを記述したのですが、変換されていない事に気付きました。 設置の仕方が可笑しいのでしょうか?それとも利用する関数が違うのでしょうか?アドバイス頂ければ幸いです。 以下は試行錯誤ながら実際に記述しているコードの一部です。 //echo preg_replace($row["mail"]); //echo (htmlentities($row["mail"])); echo (htmlspecialchars($row["mail"]));

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

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

htmlspecialchars で変換されるのは、参考URLにあるように 「"」「'」「&」「<」「>」の5つで 「@」は、対象外です。 元々「@」を表すエンティティ文字列は、無かったように思います。

参考URL:
http://jp.php.net/manual/ja/function.htmlspecialchars.php
sadacha
質問者

お礼

BLUEPIXY様 こんばんは。お世話になっております。 >元々「@」を表すエンティティ文字列は、無かったように思います。 そうでしたか…今回教えていただいたサイトは以前にもこちらで教えていただき、「"」「'」「&」「<」「>」の5つというのはその時知りましたが、他に手立てはあるのか?と探して居たもので…。 いずれにせよ、無いと分かれば次に進めます。ご親切な回答を有難う御座いました。

関連するQ&A

  • DBから出力の際preg_replace等が効かぬ

    データベースを使ったウェブサイト。 POSTを使ったformタグより、textareaにてテキストをsql文にて、 MySqlにinsertし、(このときにmysql_real_escape_string) 読み出すときにhtmlspecialcharsしてprint。 これが一般的な流れなのですが、 上記のまま行うと、改行(\r\n)がウェブ上に見えてしまいます。 ですので、 1:print preg_replace("/\r\n/","<br />", htmlspecialchars($ans['Pt_txt1'], ENT_QUOTES, 'UTF-8')); 2:print nl2br(htmlspecialchars($ans['Pt_txt1'], ENT_QUOTES, 'UTF-8')); などをやって消そうとしているのですが消えません。 ためしに、 $aaa ="適当な文字"; 1:print preg_replace("/\r\n/","<br />", htmlspecialchars($aaa, ENT_QUOTES, 'UTF-8')); 2:print nl2br(htmlspecialchars($aaa, ENT_QUOTES, 'UTF-8')); のように、MySqlを介さずに直接出力した場合、 ちゃんと改行コードは<br />に変更してくれましたので ソースの記述ミスではないと思うのです。 原因はなににあるでしょうか。 なお、現状phpmyadminで覗くと、 「フィールドA」(mysql_real_escape_stringを通してinsert) ----- あいうえお\r\nかきくけこ ----- 「フィールドB」(mysql_real_escape_stringを通さずにinsert) ----- さしすせそ たちつてと ----- となっているフィールドがありますが、 それらがhtmlで出力されたもののソースを見ると、 ----- A:あいうえお\r\nかきくけこ B:さしすせそ<br />たちつてと となぜかBのほうが希望通りの動きをします。 cを通さずにDBに入れてしまったほうが希望通りに動きます。 さっぱり困りました。

    • ベストアンサー
    • MySQL
  • phpのpreg_replaceで質問です

    お世話になります phpのpreg_replaceで質問です 下記の様な記述にて文字列の置換をしています $body = preg_replace("/cid:(\d{2,})@(\d{6}).(\d{6})/","/bl/id/$1/",$text); コレを改良してcidの次に入る値で処理を分けたいのですが、うまくいきません。 どなたかご教授お願い致します $arr = array("gif","jpg"."png"); $body = preg_replace("/cid:(\d{2,})@(\d{6}).(\d{6})/","/bl/id/$1/$arr[$1]",$text); 宜しくお願い致します

    • ベストアンサー
    • PHP
  • php 指定文字列以降の削除

    phpにて半角スペース以降の文字列を問答無用で削除するというプログラムを作ろうとしてるのですが上手くいきません。 どうすればできますでしょうか? ご教授のほどよろしくお願いいたします。 ---- ソースコード $str = '2017/1/1 10-28'; if (preg_match("/ /", $str)){ $replace = str_replace(' ', '', $str); } echo $replace;

    • ベストアンサー
    • PHP
  • 【PHP】preg_replace() で正規表現が正常に動かない?

    PHP5利用者です。 preg_replace() が思い通りに動かないため困っています。 マルチバイト文字及び正規表現を使おうとした場合動作がおかしいのです。例えば、 「 . 」は任意の1文字とされていますが、 $str = preg_replace("/第.回/", "第3回", "今日は第*回目です。"); 等と書いても何も置換されません。 これは一体どういうことなのでしょうか? 文字コードはUTF-8です。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • htmlspecialcharsの文字化け(?)

    お世話になります。 現在PHP勉強中で、フォームの内容をCSVに保存し、情報をメールで送信する、 というものをつくっているのですが、 フォーム上でタグを利用できないようにhtmlspecialcharsを使用することにしました。 とりあえずタグが使えないように置き換えは出来たのですが、 なぜか「"」の前に「\」がついてしまい、困ってます。 以前、エンコード設定がSJISだった時に「予約」「表示」等の文字が 「予\約」「表\示」になったことがあり、今回もその類かと思ったのですが、 今回は全てEUCにしているので、それはないと思います。 フォームに「<"">」と入力し、その部分を <? echo htmlentities($m_name,ENT_NOQUOTES); ?> と記述したところの表示結果が <\"\"> というようになっています。 どうしたらこの「\」がつかなくなるのか、 わかる方いらっしゃいましたら教えてください. バーションはPHP4.2.3です。

    • ベストアンサー
    • PHP
  • タグをテキストに置き換えた後にURLを読み取る方法

    掲示板にURLが入力された際に自動でリンク生成ができるようにしているのですが、タグをテキストに置き換えて(HtmlSpecialChars)実行すると上手くいきません… こんな感じです。 多少省略しています。 「&」に問題があるのでしょうか・・・ $text = HtmlSpecialChars($rec['value']); $text = preg_replace("/&gt;&gt;([0-9]+)/","<a href=\"./test.php?id=$id&end_id=\\1\">>>\\1</a>",$text);

    • ベストアンサー
    • PHP
  • PHPの記述内容

    以下の記述内容と意味が分からず困っています。初心者にも分かりやすく教えていただけないでしょうか。 <?php // 読み込み $file = 'side.html'; if(file_exists($file)){ $content = file_get_contents($file); $content = preg_replace(array("/\r\n|\n\r|\n|\r/", "/'/"),array("", "\'") , $content); echo 'document.write(\'' . $content . '\');'; } ?>

  • 初めてばかりのPHPでメールフォーム作ったのですが

    メールフォームを制作したのですが、動いたのはいいのですが、 別々にformの値を送っているのですが、うまく動きません。 どうしたらいいでしょうか? mb_language("Japanese"); mb_internal_encoding("UTF-8"); if($_SERVER['REQUEST_METHOD']=="POST"){ $array = array(); $vacation_radio = htmlspecialchars($_POST["vacation_radio"], ENT_QUOTES); $name = htmlspecialchars($_POST["name"], ENT_QUOTES); $vacation_helo = htmlspecialchars($_POST["vacation_helo"], ENT_QUOTES); $kanso = htmlspecialchars($_POST["kanso"], ENT_QUOTES); $h = htmlspecialchars($_POST["h"], ENT_QUOTES); $m = htmlspecialchars($_POST["m"], ENT_QUOTES); if(isset($_POST["vacation"])){ $vacation_radio_search = array("1", "2", "3"); $vacation_radio_replace = array('午前', '午後', '深夜); $vacation_radio_a = str_replace($vacation_radio_search, $vacation_radio_replace, $vacation_radio); $vacation_helo_search = array("5", "6"); $vacation_helo_replace = array('おはようございます。', 'おつかれさまです。'); $vacation_helo_a = str_replace($vacation_helo_search, $vacation_helo_replace, $vacation_helo); mb_convert_variables('UTF-8', 'EUC-JP', $name); mb_convert_variables('UTF-8', 'EUC-JP', $kanso); $mail_object = "ITSG ". $vacation_radio_a ." ". $name ; $mail_ob = $vacation_helo_a. "\n". $name ."\n\n". $vacation_radio_a ."\n". $kanso; if (mb_send_mail("test@test.com", $mail_object, $mail_ob, "From: test@test.com")) { echo "メールが送信されました。"; } else { echo "メールの送信に失敗しました。"; } } if(isset($_POST["flex"])) { $vacation_helo_search = array("7", "8"); $vacation_helo_replace = array('おはようございます。', 'おつかれさまです。'); $vacation_helo_a = str_replace($vacation_helo_search, $vacation_helo_replace, $vacation_helo); mb_convert_variables('UTF-8', 'EUC-JP', $name); mb_convert_variables('UTF-8', 'EUC-JP', $kanso); $mail_object_a = $name . " " . $h . ":" . $m ; //$mail_ob_a = $vacation_helo_a. "\n". $name ."\n\n". $h .":" . $m ."\n". $kanso; $mail_ob_a = $vacation_helo_a; if (mb_send_mail("test@test.com", $mail_object_a, $mail_ob_a, "From: test@test.com")) { echo "メールが送信されました。"; } else { echo "メールの送信に失敗しました。"; } } } flexの7と8の値が帰って来ません。 どうしたらよいのでしょうか? わからないなりにつくってみたのでソースが汚いと思いますが、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 改行コードの<BR>への変換がうまくいきません。

    はじめまして よろしくお願いします。 仕事でPHPを触れはじめたところです。 textarea タグで入力されたものをMysqlに保管し、 また表示するというようなものを作ろうとしています。 困っているのは Mysqlがどうのではなくその登録前に 改行コードを <br>タグ に変換をかけておこうというところで躓いています。 セッションを開始しておいてFormタグからの値を 次のページで受け取っています。 ここの過去ログ等を参考にしてみたのですが... $_SESSION['e_biko'] = htmlspecialchars($_POST['biko'] , ENT_QUOTES) ; $tmp_biko = ""; $tmp_biko = str_replace("\r\n", "\r", $_SESSION['e_biko']); $tmp_biko = str_replace("\r", "\n", $tmp_biko); $_SESSION['e_biko'] = str_replace("\n", "<br>", $tmp_biko); このあとでechoを使って$_SESSION['e_biko'] を表示させています。 しかし改行しないんです。<BR>タグへの変換ができておらず、表示されたHTMLのソースコードを見ると改行コードがそのまま出力されています。 HTML及びPHPの文字コードはEUCで記述しています。 開発及び確認はWindows・IE6で行っています。 何か考えられる原因、あるいはバグかあるでしょうか? ちなみに下記でも駄目でした。 $_SESSION['e_biko'] = preg_replace("/\r\n|\r|\n/", "<br>", $_SESSION['e_biko']); お分かりになられる方おられましたらよろしくお願いいたします。

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

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

    • ベストアンサー
    • PHP

専門家に質問してみよう