schedule2019-02-14

クエリパラメータが文字参照として表示される|PHP

PHPでクエリパラメータ付きのURLを確認していると、&currencyの部分が¤cyとなって表示された。 初めて見る特殊文字だったので共有します。

意味

currency:通貨、 流通貨幣(Weblioより) ¤:国際通貨記号(Wikiより)

現象

下のようにクエリパラメータのcurrecyに通貨の情報を渡したURLをechoして表示したら現れた。

echo 'http://{domain}/api?price=100&currency=JPY';
// 出力
// http://{domain}/api?price=100¤cy=JPY

http://{domain}/api?price=100&currency=JPY

HTMLに直接書くと現れない。

同様の質問がStack Overflowでも2件ありました。

PHP "&curren" string turns into weird symbol - Stack Overflow

環境

  • PHP7.x
  • HTML5
  • Chrome

文字参照

¤がHTMLの文字参照に割り当てられているみたいです。 セミコロンなしでも変換するようです。

おなじみの空白記号の などもこれに当たります。

クエリパラメータとして使いそうな文字をいくつか抜粋する。

記号 文字実体参照 説明
© © 著作権記号
° ° 度記号
µ µ ミクロン記号
¬ ¬ 否定記号
® ® 登録商標
× × 乗算記号

試しに盛り盛りのクエリパラメータを表示してみる。

echo `https://test.com/api?query=1&copy=12&degree=45&microsoft=true&note=text&regular=満タン&timespan=100`;

出力:https://test.com/api?query=1©=12°ree=45µsoft=true¬e=text®ular=満タン×pan=100

おー!たくさん出た!

結論

実害は少ないと思いますが、文字参照にも気をつかったほうが良さそうです。