投稿日: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のネタにする予定です。
まだ時間があるので、引き続き検証したいと思います。
最後まで読んでくださりありがとうございました。