みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

文字列(×と÷)の文字化けについて

phpを勉強している初心者です。
2つのテキストボックスを作って、
各数値を「架ける」または「割る」計算処理ができるように記述しています。

index.phpのフォーム部分は下記のようになっています。
<form method="post" action="test.php">
入力欄1:<input type="text" name="number1"><br>
<input type="radio" name="kigou" value="×">×
<input type="radio" name="kigou" value="÷">÷<br>
入力欄2:<input type="text" name="number2"><br>
<input type="submit" value="計算">
</form>

test.phpの処理部分は下記のようになっています。
<?php
if($_POST["kigou"] == "×" ){
$answer=$_POST["number1"]*$_POST["number2"];
}elseif($_POST["kigou"] == "÷" ){
$answer=$_POST["number1"]/$_POST["number2"];
}
print $_POST["number1"].$_POST["kigou"].$_POST["number2"]."=".$answer;
?>

しかし、結果では、記号部分が文字化けしてしまいました。
(例:4テ4=16、4テキ4=1)
HTMLの特殊記号を試しに設定してみましたが
計算すらしてくれなくなりました。
(&times;と&divide;)

こんな場合、どうすれば良いのでしょうか?
また、if分の条件式にはHTMLの特殊記号は使えないのでしょうか?

よろしくお願いします。

投稿日時 - 2013-09-22 17:59:09

QNo.8275117

困ってます

質問者が選んだベストアンサー

まず、Windowsの「メモ帳」を使われている場合は使用をやめましょう。欠陥品です。
気軽に導入できるエディタとしてはNotepad++が一番おすすめです。
http://notepad-plus-plus.org/

こちらの回答を参考にしてください。
http://okwave.jp/qa/q8264830.html

これを導入して全HTML・PHPファイルの改行フォーマットを「UNIX」(LF)、文字コードを「UTF-8N」(UTF-8BOM無し)に変換した上で、

【HTMLファイル】
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

【PHPファイル】
PHPで出力を開始する前に
header('Content-Type: text/html; charset=utf-8');
を実行する
(HTMLファイルの方法でも出来るがこちらの方が望ましい)

のように書くようにしてください。

>> また、if分の条件式にはHTMLの特殊記号は使えないのでしょうか?

そんなことはあり得ません。
むしろPHPはどんな「バイト列」でも扱えます。
画像ファイルなどのバイナリデータもいけちゃいます。

【備考】

デバッグ時はphp.iniの設定で

error_reporting = E_ALL | E_STRICT
display_errors = On

でやりましょう。全てのエラーを出しながらデバッグするのは常識です。
そうすると気づくと思いますが、 if ($_POST["kigou"] == "×" ) { } だとE_NOTICEが発生する場合があるので、やめましょう。
http://qiita.com/mpyw/items/2f9955db1c02eeef43ea
http://qiita.com/mpyw/items/c39b9ee695a5c2e74627

入力値のバリデーションも実装すべきです。
http://php.net/manual/ja/function.ctype-digit.php
http://php.net/manual/ja/function.is-numeric.php

投稿日時 - 2013-09-23 07:41:15

お礼

To_aru_Userさま、回答ありがとうございます!
お礼が遅くなってしまい申し訳ありません。

教えていただいたことを一つ一つ試してみたら、文字化けが解消しました。
ありがとうございました!!

>入力値のバリデーションも実装すべきです。
バリデードというのも必要なんですね。やってみます。
すごく丁寧に教えていただいて、本当にありがとうございました。
また何かのときは、よろしくお願いいたします!

投稿日時 - 2013-10-01 09:25:28

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問