質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1748閲覧

htmlspecialchars

githubac

総合スコア99

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2015/07/21 10:20

htmlにphpの変数の中身を表示するときhtmlspecialcharsを噛ませて
悪意のある値を無力化するというのは理解できたのですが
現在、例えば法人名で「&」が & と変換されて表示されます。
ここは&だけが出て欲しいのですが良い方法、メジャーなやり方にはどのようなものがありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

htmlにphpの変数の中身を表示するときhtmlspecialcharsを噛ませて
悪意のある値を無力化するというのは理解できたのですが

違います。

html の中にただのテキストとして表示させたい値を出力する場合、html という言語の規則に則った変換を行なう必要があり、その変換を行なうのが htmlspecialchars です。

例えば法人名で「&」が & と変換されて表示されます。

という文章に悪意はありませんが、htmlspecialchars を通さなければ、あなたが意図した通りの表示になりません。あなたに悪意はないですし、↑の入力値に悪意もないと思いますが、htmlspecialchars を通す必要があります。神のような存在がこの世界からすべての悪意を取り払ったとしても htmlspecialchars は必要です。

(tetatail は PHP ではないと思いますが(^_^;))

例えば法人名で「&」が & と変換されて表示されます。

htmlspecialchars が重複して処理されていると考えられます。同じ入力値に対して2回 htmlspecialchars が実行されていませんか?

htmlspecialchars は値を html に出力するときに1回だけ実行する必要があります。

投稿2015/07/21 10:43

編集2015/07/29 07:10
ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tozjp

2015/07/21 11:27

少し補足させていただくと、 CDATA 形式のコンテンツを持つ要素では htmlspecialchars() 関数を挟むと正常に出力されないケースがあります。 http://bakera.jp/ref/html/data/cdata たいていは script タグですね。 もし script タグ内に対して出力するなら htmlspecialchars() ではなく json_encode() でエンコードすると良いでしょう。 そこに出力することの良し悪しには言及しませんが。
ngyuki

2015/07/21 11:32

そうですね・・script タグの中への出力は鬼門ですね。。。 個人的には適当な要素の data Attribute に htmlspecialchars(json_encode()) で出力して、js で JSON.parse() するのが安全で良いと思います。
maisumakun

2020/02/07 22:42

> tetatail は PHP ではないと思いますが CakePHPのようです。
guest

0

「& 」であればブラウザでは「&」と表示されて問題ないはずですがどういうご質問でしょう?

追記
ngyukiさんが補足されていますね。2回エンコードしていないかチェックしましょう。

投稿2015/07/21 10:57

編集2015/07/21 10:59
osmoc-1970

総合スコア124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

法人名の場合は、htmlspecialcharsを通す前に&を全角の&に変換すればその後の処理も悩まず済むと思います。

投稿2015/07/21 10:23

rik

総合スコア1151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rik

2015/07/21 11:28 編集

この方法は本筋から外れていることは承知の上ですが、「例えば法人名」と言う前提の話です。後からデータの使いまわし等で弊害が出ることを考えるとテクニックの一つとして提案いたしました。データの使い回しとは、CSV出力等です。ブラウザでは&は&で表示されますが、htmlspecialcharsを使用するという事は1個だけではなく多くのデータを扱う事であり、そうなると当然Excel出力やCSV出力なども有るでしょう。JavaScriptでの処理も考えると厄介です。文字数を数える時も4文字増えてしまいます。 あくまでもテクニックの一つとしてお考えください。 半角の必要性があるならばそれ相応の処理を行う事になるでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問