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()で表示されない文字を表示させる方法はありますか?
No.4ベストアンサー
- 回答日時:
文字化けの様子と、mb_detect_encodingの結果から判断すると
・htmlから読み込んだ $a は UTF-8 が使われている
・PHP中に書かれた「の文字コードは」が化けるということは、この部分の文字コードはUTF-8では無い
まずは、PHPのファイルの文字コードを調べてください。UTF-8では無いはずです。
そして、保存時にUTF-8になるように編集に使っているエディタかなんかの設定を変えるか、文字コード変換ソフトを使ってUTF-8に変換してください。
charset=UTF-8 等は、その文字コードで書いている、ということをブラウザ等に知らせるためのものです。
自動変換するものではありません。実際にそのコードで書かれているかどうかは、出力する側の責任です。
# 一部、自動で文字コードを変更したり、警告を出したりするエディタもありますが。
No.3
- 回答日時:
>ASCII文字(testとか)だとうまくいったりしたら日本語の問題でほぼ確定ですね。
これはやってみました?
あと、当然ソースファイルの文字コードはUTF-8ですよね?
No.2
- 回答日時:
$aの値がどこから来たのかわからないので推測になりますが、この状況だと疑わしいのは
- 日本語だから
- おっしゃるように改行とかが入ってる
あたりでしょうかね。
ASCII文字(testとか)だとうまくいったりしたら日本語の問題でほぼ確定ですね。
日本語だと文字コードをあわせる必要が出てきます。
改行とかが入ってるのなら、[$a]を出力して
[テスト]
じゃなくて
[テスト
]
が出てるとかそういったことを確認してみてはどうでしょうか。
この回答への補足
文字コードはUTF-8に指定しました。
$aの表示も echo "$a,$b,$c" としたところ
「テスト,テスト2,テスト3」 となり変数の後に改行文字が入っていません。
変数と','の間もスペースはありません。
No.1
- 回答日時:
その別HTMLとPHPの文字コードが違う(UTF-8とShift-JISとか)は無いですか?
この回答への補足
$mojicode = mb_detect_encoding($category);
echo "$category の文字コードは $mojicode";
と書いてみると、
「テスト �̕����R�[�h�� UTF-8」となりました。
htmlのmetaタグでcharset=UTF-8としているのですが、
この文字化けの原因が問題解決につながるような気がしますが、
理由がわかりません。
すいません。補足のところの変数名が$categoryとなっていますが、$aの間違いです。
補足の内容を編集できなかったので、こちらの欄を利用させてもらいました。
文字コードの宣言の仕方や書く場所が適切でないことが原因でないかと考えています。アドバイスをいただけると幸いです。
もしくは、どこか参考になるサイトでもありましたら、教えてもらえると助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- PHP PHP MySql ページング 2 2022/09/20 06:38
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
発生した文字化けに対する対処
-
自作cgiのページがIE10で文字化...
-
onedrive にexcelファイルをア...
-
PHPのif文でその処理を途中で抜...
-
.phpと.incファイルの違いはな...
-
.htaccessにphp_valueが使用できな
-
form actionで二つ送信先を指定...
-
phpでget_headers()が使えない?
-
PHP8を使うと、大量のWarningが...
-
Apacheでhttp://localhost/が表...
-
フォントの色を変えるには?
-
cakephpのサブタイトルはどこで...
-
VBSの「MsgBox」について
-
stat failed
-
PHPのコマンドラインでのバージ...
-
openCVの超解像処理
-
FTPClientで転送結果(OKかFAIL)
-
FTPコマンドでディレクトリごと...
-
PHPでfatal errorが出ても無視...
-
<A href ~ と一緒に値を渡すには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EclEmmaレポートのエクスポート...
-
PHPExcelバッファへの書き込み...
-
<meta charset="utf-8"><!-- 文...
-
mysql→EUC-JP、php→UTF-8の時の...
-
ファイルの文字コードを調べる...
-
PHP time()に関しての質問です
-
phpで動的タイトル
-
文字化けについて
-
phpログファイルの文字化けにつ...
-
GEEKLOG(ギークログ) 文字化け
-
batファイルでうまく動かないプ...
-
文字集合範囲外の文字とパーセ...
-
HTTPヘッダはメタタグにも記述...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
index.phpに入るには、どうすれ...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
PHP8を使うと、大量のWarningが...
-
別ファイルの変数を呼び出した...
おすすめ情報