WordPressテーマのfunction.phpに関数追加 文字列比較が不一致発生

シェアする



WordPressのphpに手を入れようとした最初のころ、ちょっとつまづいたことを書き残しておきます

たいした話ではないですが、こんなこともあったということを備忘録として残しておきます

WordPressのfunction.phpに関数追加

WebAPIを呼び出す関数をWordpressの使用しているテーマのfunction.phpに追加しています

このfunction.phpに追記を行った最初のころの話です

simplexml_load_string(@file_get_contents)で読み込んだxmlファイル文字列比較

楽天のAPIを使って、simplexml_load_string(@file_get_contents)でエリアコードのxmlファイルを読み込みを行いました

読み込んだエリアコードのxmlを、ファイルに書き出すときに、xmlの要素のひとつを、if分で文字列比較して、一致するかどうか判定しています

ファイルへの書き出しがうまくいかないので、echoで、文字列の内容を表示させて確認していました

Stringの内容と、比較対象の文字列は同じように見えているのですが、なぜか判定がFALSEになっています

表示させてみると同じ文字列に見えるのに、文字列比較ではFALSEと判定していたのです

file_get_contentsの結果とか、simplexml_load_stringの結果とかがうまくいっていないのか?とか、APIのurlが間違っていないか?といったことを調べたのですけれどおかしくなさそう

urlを直接ブラウザに渡してもちゃんとエリアコードのxmlは返ってくるし、echoで表示させた内容も間違いなさそうでした

で、おかしくなさそうなんだけどと思いながら、作業を中断して外出しました

そして、出かけ先で、ちょっと思いつきました

phpファイルの文字コード違い

もしかしたら、どこかのファイルの文字コードがおかしくなっているんじゃないかって思いついたのです

夜帰ってきて、調べてみたら、function.phpの文字コードがShift-JISになっていました

普通はUTF-8のはずだし、他のファイルもUTF-8です

ですが、function.phpがShift-JISになっていました

phpファイルの文字コードがShift-JISなので、文字列比較のときに、GetしたUTF-8の文字列と、phpファイル内に記載されているShift-JISの文字列を比較していることになっていた様子です

それでは、文字列比較すると違う文字と判定されてしまいます

関数を追加する前のfunction.phpには日本語文字が入っていなくて、新たな関数を追加するときに日本語文字を入れたので、保存するときにUTF-8ではなく、Shift-JISになってしまったのですね

phpファイルの文字コードの修正して保存して解決

いったん日本語文字が入った追加部分を削除して、function.phpファイルをUTF-8に文字コード変換してから、あらためて日本語文字の入った部分をコピペして、改めてUTF-8で保存しました

これで、サーバーにfunction.phpをFTPして、動かしてみたら、文字列比較がうまくいきました

無事解決です