【WordPress】POSTやGETに「’」「”」が含まれる場合の挙動について
こんにちは、webエンジニアのゾノ( @ozonosho )です。
本日はWordPressでPOSTデータやGETデータを扱う際の小ネタです。
WordPressを利用していて「’(シングルクォーテーション)」「”(ダブルクォーテーション)」を含む文字列を送信すると、HTMLタグインジェクション対策のために勝手にエスケープされてしまいます。
文字列:’a’
↓
POST
↓
文字列:’\a\‘
みたいな感じです。
ちなみにphp.iniの設定で「magic_quotes_gpc」がOnになっている場合も同様にシングルクォーテーション等がエスケープされるのですが、WordPressの場合「magic_quotes_gpc」がOffになっていてもエスケープされます。
エスケープされるだけなのでHTML上での表示は変わりませんが、DBに入れたり、(テーマによっては)検索フォームで入力された文字を受け取ったりする場合には、エスケープされた文字列がそのまま入ることになります。
細かいクライアントだと「検索フォームに『’a’』と入力したのに検索結果ページで検索フォームに入る文字列が『’\a\‘』に変わっているじゃないか」と指摘されるので、そんなときには「stripslashes」関数を挟みましょう。
※php.net
https://www.php.net/manual/ja/function.stripslashes.php
バックスラッシュを取り除くPHP関数で、エスケープするために挿入されたバックスラッシュを取り除いて元の入力内容に戻してくれます。
(使用例) $name = (isset($_POST['name'])) ? stripslashes($_POST['name']) : '';
こんな感じです。
実際には、送信データは何かしらエスケープしないとまずいので、
(使用例) $name = (isset($_POST['name'])) ? stripslashes((htmlspecialchars($_POST['name'])) : ''; $name = (isset($_POST['name'])) ? stripslashes(esc_attr($_POST['name'])) : '';
※WordPressなら後者推奨
みたいに使用するのがベターです。
おわりに
以上、今回の記事ではPOSTやGETに「’」「”」が含まれる場合のWordPressの挙動についてを紹介させていただきました。
当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。