投稿日:2023年6月1日

何だかよく分からないタイトルでスミマセンm(_ _)m
前回のブログ記事「画像比較表示プラグイン Twenty20 Image Before-Afterをアイキャッチ画像に適用した話。」 では紹介してませんでしたが、データベース接続するPHPで下記のような記述をしていました。

$db_user = "root"; //ユーザー名
$db_pass = "root"; //パスワード
$db_host = "localhost"; //ホスト名
$db_name = "twenty20"; //データベース名
$db_type = "mysql"; //データベースの種類
$dns = "$db_type:host=$db_host;dbname=$db_name;charset=utf8";

WordPressでは、wp-config.phpで下記のような記述をしています。

/** WordPress のためのデータベース名 */
define('DB_NAME', 'twenty20');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'root');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'root');

/** MySQL のホスト名 */
define('DB_HOST', 'localhost');

define('xxxx', 'zzzz'); という、define関数でxxxxという定数を定義しています。
定数なので書き換えは不可です。

重複するとプログラムらしくないと思い、データベース接続PHPを下記のような記述にしてみました。

 require_once(dirname(__FILE__)."/../../../wp-config.php"); // wp-config.php読み込み
 $db_user = DB_USER; //ユーザー名
 $db_pass = DB_PASSWORD; //パスワード
 $db_host = DB_HOST; //ホスト名
 $db_name = DB_NAME; //データベース名
 $db_type = "mysql"; //データベースの種類
 $dns = "$db_type:host=$db_host;dbname=$db_name;charset=utf8";

その結果、下図のように、ダブルミュート「”」の前にバックスラッシュ「\」が出力されてしまいました。

▲これではTwenty20が出力されません。
データベースに値を渡す際にPHPのエスケープ関数が働いたからだと思います。

なので下記のようにエスケープ処理を無効にする必要があります。

$shortcode = stripslashes($_POST['shortCode']);

stripslashes関数が、このエスケープ処理を無効化してくれます。

▲結果、希望通りの出力になりました。

まとめ

しばらく、この現象に首をかしげていました。
何かが解決すると、何かで問題が生じると言った感じですかね。。。

PHPもまだまだ勉強中なので、引き続き精進したいと思います。

本内容は、6月25日開催のChiba WordPressミートアップ でLTのネタにする予定です。
まだ時間があるので、引き続き検証したいと思います。

最後まで読んでくださりありがとうございました。

関連サイト
Pocket