【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の挙動についてを紹介させていただきました。

つくりばのことが気になりましたか?

つくりばは、ココトモ・未来地図を自社で10年以上運営してきた知見をもとに、相談・コミュニティの開発と運営を支援しています。いきなりのご相談でなくて大丈夫です。まずは私たちの実績や考え方をご覧ください。

つくりばについて知る

← WordPressの一覧へ戻る

Webサービスの課題を、まずは無料相談で整理しませんか。

既存サービスの改善、新規立ち上げ、運用サポート、予算内での優先順位づけなど、今の状況に合わせてじっくりお話を伺います。まだ形になっていない段階のご相談も大丈夫です。

  • videocamオンライン対応
  • forum課題整理だけでも歓迎
  • payments概算費用の目安がわかる
無料相談を申し込む