- 締切済み
文字が1バイト分しか出力されない
よろしくお願いします。 フォームから取得したデータをもとにメッセージを作成し、それを出力させたいと思っています。 サンプルデータを作りました。 ==サンプルここから============================ <?php if($_POST['q1'] != ""){ for($j=1;$j<4;$j++){ $q[$j] = $_POST['q'.$j]; if($q[$j] == "2"){ $q2[$j] = "bad"; }elseif($q[$j] == "4"){ $q2[$j] = "ok"; }elseif($q[$j] == "6"){ $q2[$j] = "good"; } } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>テスト</title> </head> <body> <?php for($i=1;$i<4;$i++){ echo $q2[$i]."<br />"; } ?> <form action="testtest.php" method="post"> <input type="radio" name="q1" value="2" />2 <input type="radio" name="q1" value="4" />4 <input type="radio" name="q1" value="6" />6<br /> <input type="radio" name="q2" value="2" />2 <input type="radio" name="q2" value="4" />4 <input type="radio" name="q2" value="6" />6<br /> <input type="radio" name="q3" value="2" />2 <input type="radio" name="q3" value="4" />4 <input type="radio" name="q3" value="6" />6<br /> <input type="submit" value="送信" /> </form> </body> </html> ==サンプルここまで============================ このフォームをtesttest.phpで保存して実行すると、フォームから送られたデータを元に「bad」「ok」「good」のいずれかが表示されなければならないのですが、先頭の一文字である「b」「o」「g」しか出力されません。 「bad」「ok」「good」を日本語にすると、文字化けが起きるので、1バイト分しか出力されていないのではないか?と素人ながらに考えております。 サーバーによってはうまくできることもあり、サーバーのせいかな?とも思っていますが、何か回避策をご存じの方がいらっしゃいましたら、ご教授いただけると幸いです。 よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- mpx
- ベストアンサー率71% (149/209)
>> 何か回避策をご存じの方がいらっしゃいましたら、ご教授いただけると幸いです。 スクリプト自体に問題はなさそうですが、 もしも提示のサンプルコードがコピペなら、 いくつか全角スペースのコードが混じっていますので それが文字化けの原因の可能性もあります。 取り除いて確認してみては如何でしょうか?
お礼
ご回答ありがとうございます。 元のコードを確認したところ、全角スペースは入っていませんでした。 その後、スクリプトを別の形にすることで何とか動くようになりました。 いろいろ自分なりに検証した結果、 $q2[$i] の部分がまずいようで、数字が代入された時点で $q2[0] や $q2[1] となる部分で、うまく認識がされないようでした。 $comment[$i] とすることで解決しました。 変数名の最後に数字を使っていはいけない、といったような問題点があるんでしょうか。 最初の1文字が数字ではいけない、というのは知っているのですが。。