プロが教えるわが家の防犯対策術!

phpでswitch文を使って変数の値に応じて処理を変えたいのですが、なぜか常にdefault処理をされてしまいます。

htmlの別ファイルから例えば"テスト,テスト2,テスト3"という文字列を受け取って
strtok()を使って、$aに"テスト", $bに"テスト2", $cに"テスト3"と入るようにしました。

それで$aには"テスト"の文字列が入っているはずなので、

switch($a){
case "テスト":~~/処理
break;
default:~~//処理
break;
}

と書いた場合、case "テスト" の処理がされるはずだと思うのですが、
なぜかdefaultの場合の処理がされてしまいます。

gettype($a); で$aの型を調べると、string型になっていおり、
$aの中身を echo "a: {$a}"; で確認すると 「a: テスト」と表示されます。

しかし、if文で
if($a == "テスト"){
echo "a match テスト";
}
else{
echo "not match";
}
のように書いてみると、 「not match」が表示されます。 この理由が分かりません。 
この理由が分かる方はいらっしゃいますか?
解決策を教えてください。

また、もしかしたら$aにはecho や print()では表示されない文字が
付属しているのかもしれないと考えていますが、
echoやprint()で表示されない文字を表示させる方法はありますか?

A 回答 (4件)

文字化けの様子と、mb_detect_encodingの結果から判断すると


・htmlから読み込んだ $a は UTF-8 が使われている
・PHP中に書かれた「の文字コードは」が化けるということは、この部分の文字コードはUTF-8では無い


まずは、PHPのファイルの文字コードを調べてください。UTF-8では無いはずです。
そして、保存時にUTF-8になるように編集に使っているエディタかなんかの設定を変えるか、文字コード変換ソフトを使ってUTF-8に変換してください。

charset=UTF-8 等は、その文字コードで書いている、ということをブラウザ等に知らせるためのものです。
自動変換するものではありません。実際にそのコードで書かれているかどうかは、出力する側の責任です。

# 一部、自動で文字コードを変更したり、警告を出したりするエディタもありますが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。まさにその通りでした。

解決しました。

お礼日時:2011/03/27 15:13

>ASCII文字(testとか)だとうまくいったりしたら日本語の問題でほぼ確定ですね。



これはやってみました?

あと、当然ソースファイルの文字コードはUTF-8ですよね?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
UTF-8で保存していたと思ったら、違う文字コードで保存されていました。
無事解決しました。

お礼日時:2011/03/27 15:14

$aの値がどこから来たのかわからないので推測になりますが、この状況だと疑わしいのは


- 日本語だから
- おっしゃるように改行とかが入ってる
あたりでしょうかね。
ASCII文字(testとか)だとうまくいったりしたら日本語の問題でほぼ確定ですね。
日本語だと文字コードをあわせる必要が出てきます。

改行とかが入ってるのなら、[$a]を出力して
[テスト]
じゃなくて
[テスト
]
が出てるとかそういったことを確認してみてはどうでしょうか。

この回答への補足

文字コードはUTF-8に指定しました。
$aの表示も echo "$a,$b,$c" としたところ
「テスト,テスト2,テスト3」 となり変数の後に改行文字が入っていません。
変数と','の間もスペースはありません。

補足日時:2011/03/27 03:45
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。無事解決しました。
丁寧なご説明に感謝いたします。

お礼日時:2011/03/27 15:15

その別HTMLとPHPの文字コードが違う(UTF-8とShift-JISとか)は無いですか?

この回答への補足

$mojicode = mb_detect_encoding($category);
echo "$category の文字コードは $mojicode";

と書いてみると、
「テスト �̕����R�[�h�� UTF-8」となりました。 
htmlのmetaタグでcharset=UTF-8としているのですが、
この文字化けの原因が問題解決につながるような気がしますが、
理由がわかりません。

補足日時:2011/03/27 04:01
    • good
    • 0
この回答へのお礼

すいません。補足のところの変数名が$categoryとなっていますが、$aの間違いです。
補足の内容を編集できなかったので、こちらの欄を利用させてもらいました。

文字コードの宣言の仕方や書く場所が適切でないことが原因でないかと考えています。アドバイスをいただけると幸いです。
もしくは、どこか参考になるサイトでもありましたら、教えてもらえると助かります。

お礼日時:2011/03/27 04:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!