- ベストアンサー
htmlspecialcharsについて
原則からはずれるのですが、htmlspecialcharsをあえて、mysqlに登録する前に使えませんか? 例えば1000行10カラムを表示する場合、1万回もhtmlspecialcharsを使わなくてはいけないので、何とか軽く処理できないかと思いました そこでhtmlspecialcharsを使って変換してからmysqlに登録したいのです 変換した文字がmysqlに不具合を与えることはありますか? & " ' < >
- みんなの回答 (4)
- 専門家の回答
関連するQ&A
- 文字実体参照が勝手に変換されてしまう
簡単な問合せフォームを作成中に文字実体参照に変換した文字が、元に戻されてしまい困っています。簡単なサンプルを作成してみましたが、以下の様な状態です。 1.入力フォームを持ったHTMLに 「<>と<と>」 と入力し、xxx.cgiに渡します。 2.xxx.cgi内で入力文字列を取得し、文字実体参照に変換後<hidden>で値を保持、再度xxx.cgiに<hidden>の文字列を渡すようにします。この時点で入力値は 「<>と&lt;と&gt;」 となります。 3.再度xxx.cgiが呼ばれると、文字実体参照に変換する処理が行われる為、入力値が 「&lt;&gt;と&amp;lt;と&amp;gt;」 となるはずですが、 「<>と&lt;と&gt;」 となってしまいます(変換処理が行われているはずなのに変換されていない)不思議に思って変換前のCGIの引数を確認してみると、 「<>と<と>」 と文字実体参照が元に戻されてしまっています。 ちなみに文字実体参照の変換処理は$valueに対象の文字が入っているとして以下の方法で変換しています。 ---------- $value =~ s/&/&/g; $value =~ s/"/"/g; $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/\n/<BR>/g; ---------- こういった現象についてでも何か分かるようでしたら宜しくお願いします。
- ベストアンサー
- Perl
- htmlspecialcharsの挙動について
PHPのhtmlspecialcharsについての質問です。 とあるフォームで、「情報登録フォーム」→「確認ページ」→「完了ページ」という構成でプログラムを組んでいます。 タグはエスケープした状態でDBに保存しようと思ってます。 <b>カズン</b>のようにエスケープした文字列をPOST送信したらもとの<b>カズン</b>に戻るという現象に見舞われてます。 まず「情報登録フォーム」で下記のように値をおくります。 <input type="text" name="shop" value="<b>カズン</b>" /> 「情報登録フォーム」でタグが入ってもてもエスケープできるように、「確認ページ」の出力時にhtmlspecialcharsを使っています。 結果、下記のようになります。 <input type="hidden" name="shop" value="<b>カズン</b>" /> 次にこの値を「完了ページ」にPOSTで送ろうとしたら元の<b>カズン</b>にかわってしまいます。 「完了ページ」で再度htmlspecialcharsをかけたら<b>カズン</b>になるんですが。 私は<b>カズン</b>は普通にPOSTすれば<b>カズン</b>が送られてくると仮定してたのですが、これは正しい仕様なのでしょうか?
- 締切済み
- PHP
- 特殊記号が勝手にエスケープされてしまう
Windows2000 ServerにおいてVBScriptとMicrosoft.XMLDOMを用いてASPスクリプトを作成しています。 XMLで特殊文字<,>,",',&を扱う際には<,>,",'に置換しなくてはならない事はわかったんですが、 実際にReplaceすると例えば<が&lt;になってしまいます。 置換する順番を変えてもこうなるのでおかしいと重い、&への置換を止めてもです。 しかもこれは読み出すと何事も無かったかのように&lt;が<へと戻っています。 試しに置換を全く行わない状態で 「テスト&'>"」という文字列を保存してみると、 保存先ファイルの中では「テスト&'>"」という状態になっていました。 恐らく&,<,>,"が勝手に置換され、読み出される時には元に戻す処理が行われていると思うんですが、これがどの部分で行われているのかがよくわかりません。 JavaScriptで読み出した際にも同様に復元されていたようなので、MSXMLの仕様なのかなと思うんですが、それを裏付ける資料を見つける事もできませんでした。 XMLにおける特殊記号の扱いについて書いているサイトにも記述が見つからなかったので、もしかしたら凄く基本的な事だったりおかしな質問だったりするのかもしれませんが、ご存知の方がいらっしゃいましたら是非ご教授願いたいです。 参考URLだけでも良いですのでどうかよろしくお願いします。
- ベストアンサー
- XML
- htmlspecialcharsとその逆
こんにちは。PHP(&mySQL)初心者です。 基本的な事かもしれませんが、自分で調べてもよくわからないので、どなたかご教示いただけないでしょうか。 下記のような2つのファンクションが定義されているとします。 <?php function h($value) { return htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); } ?> <?php function dec($hd_value) { return htmlspecialchars_decode($hd_value); } ?> フォームから受け取った文字列を「h()」で処理した上で、DB(mySQL)に格納し、ブラウザで表示するときは、DBから受け取った文字列を「dec()」で元に戻しています。 通常は、これで問題ないのですが、文字列に「<br/>」のようなHTMLタグと「<jpSampleTag=lnum1>」のような独自のタグ(のようなもの)が混在してた場合、ブラウザでの表示時に「<jpSampleTag=lnum1>」が無視されて表示されません。 一応、「dec(h($value))」のように、入れ子にすると「<jpSampleTag=lnum1>」の部分も表示されることがわかったのですが、今度はhtmlのタグのヤマ括弧まで「<」のようなhtmlエンティティに変換されてしまい、改行などができずに困っています。 htmlタグだけを復元する方法はないものでしょうか? あるいは、DBに文字列を格納する段階で、なにか別の処理をした方がいいのでしょうか。 どなたか良い方法をご存知の方がいらっしゃいましたら、ご教示いただけないでしょうか。 よろしくお願いします。
- ベストアンサー
- PHP
- VB2005で複数行の分割ができない
初心者恥ずかしいような質問で申し訳ないのですが、 VB2005でMDBのUPDATEをしていますが、項目数が多いので複数行にしたいのですが、2項目だけでも構文エラーとなってしまいます。1行にすると正常に処理されますので分割の記述と思います。 aとaaは整数で、bbbは文字列です。 dCom = New OleDb.OleDbCommand("UPDATE テーブルA" _ & "SET ff2= " & a & "," _ & "ff1= '" & bbb & "' WHERE ff2=" & aa, cn) はまってしまってますお助けを、よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- smartyについて困っております。
<div style="color: #ff0000;">あああ </div> のようなエスケープしてあるhtmlをmysqlに登録しておりphp側で $smarty->assign('data', $data);と登録データを代入しtpl側で {$data|smarty:nodefaults}とし表示させているのですが <div style="color: #ff0000;">あああ</div>とhtmlではなく文章で 表示されてしまいます。 ※$this->default_modifiers = array('escape:"html"');は適用してます htmlを埋め込み表示させたいのですがどうすればうまく表示させる事が できるのでしょうか?
- 締切済み
- PHP
- MySQLにHTMLタグを挿入したい
PHPでつくった登録フォームよりhtmlタグを入力してそれをtext型のフィールドにhtmlタグごと入れたいのですが、うまくいいようにはいりません。 入力 <table border="0" width="80%"><tr>問1 磁気ディスク装置において,磁気ヘッドをある位置から目的の位置に移動させるのに要する時間を何と呼ぶか。</tr><tr> <td><input type="radio" name="1" value="ア">ア アクセス時間</td><td><input type="radio" name="1" value="イ">イ サーチ時間</td><td><input type="radio" name="1" value="ウ">ウ シーク時間</td><td><input type="radio" name="1" value="エ">エ データ転送時間</td></tr></table><br><hr width="80%"><br> フィールドの保存データ <table border="0&q uot; width="80%"><tr>問1 磁気ディスク装置において,磁気ヘッ ドをある位置から目的の位置に移動させるのに要する時間を何と呼ぶか。</tr>< ;tr> <td><input type="radio" name="1" value=&qu ot;ア">ア アクセス時間</td><td><input type="radio " name="1" value="イ">イ サーチ時間</td>< ;td><input type="radio" name="1" value="ウ"& gt;ウ シーク時間</td><td><input type="radio" name=&q uot;1" value="エ">エ データ転送時間</td></tr>&l t;/table><br><hr width="80%"><br> と入ってしまい データベースを参照してhtmlを表示したときには <table border="0" width="80%"><tr>問1 磁気ディスク装置において,磁気ヘッドをある位置から目的の位置に移動させるのに要する時間を何と呼ぶか。</tr><tr> <td><input type="radio" name="1" value="ア">ア アクセス時間</td><td><input type="radio" name="1" value="イ">イ サーチ時間</td><td><input type="radio" name="1" value="ウ">ウ シーク時間</td><td><input type="radio" name="1" value="エ">エ データ転送時間</td></tr></table><br><hr width="80%"><br> と表示されうまくいきません。
- 締切済み
- MySQL
- タグの不等号処理
ただいまperlにて掲示板を製作中です。PC上でApacheを使いチェック中なのですが、タグなどで仕様する不等号を変換することが出来ません。下記のように処理しているのですが、なぜか変換されません。 foreach (@data){ s/&/&/g; s/>/>/g; s/</</g; s/"/"/g; s/\r\n/\<br\>/g; s/\n/\<br\>/g; } ちなみにs/&/&/g;の[&]の部分を[AA]等に変更すると 問題なく[&]は[AA]に変更されます。 なぜなのでしょうか?表示時にタグとして認識されてしまい困っております。どうかご教授下さい。
- ベストアンサー
- CGI
- フォームの文字列変換ができない
http://morecute.bex.jp/music/user_manager/bbs_nayu/master/index9_utility01.php このフォームでAmazonの商品コードを入力すると 商品コードが埋め込まれたURLが自動生成されフォームに出力されるようにしていたのですが、 現在動きません。 このphpのソースは↓です。 <form action="index9_utility01.php"> <input type="text" name="moji" size="80" value="<?echo "<a href="http://www.amazon.co.jp/gp/aw/rd.html?a=".$moji."&uid=NULLGWDOCOMO&url=/gp/aw/d.html&lc=msn&at=morecutebz0e-22&dl=1">アルバム情報</a><img src="http://www.assoc-amazon.jp/e/ir?t=morecutebz0e-22&l=msn&o=9&a=".$moji."" width=1 height=1 border=0" />" ?>"> <input type=submit value=sub> <font size=-1>商品コードを入力 </form> 数年前(2006年頃)はこれで問題なく出力できていたのですが・・・ phpのバージョンが変わって動かなくなったのでしょうか? サーバはXREA、及びCoreserver、PHPバージョンは 5.2.5/5.3.8 です。
- 締切済み
- PHP
- Windows98seから
Niftyのサーバに次のコードを含むパールをDLして 実行(アクセス)するとエラーになります $name =~ s/\&/\&/g; $name =~ s/</\</g; $name =~ s/>/\>/g;#error $name =~ s/\"/\"/g; #errorの行だけが問題なのですがどうすれば良いでしょうか? $name =~ s/\>/\>/g; にしてもエラーです
- ベストアンサー
- Perl
お礼
お答え頂きありがとうございます >のようにすれば1回で済みますよね。 頭固かったです!すいません >HTMLを出力 やってみます。ありがとうございました(_ _