こんにちは。
フォームのテキストボックスで半角カナを入力して送信すると、文字が化けることがあります。
どうにか回避できないでしょうか、、、^^;

「半角カナを入力するな!」という常識的な回答(笑)はナシでお願いします。^^;
ちなみに、ソースは以下です。
最初submitのところのname属性を書いていなかった時はすべて文字化けを起こしていたのですが、name属性を追加したら最初の入力だけ化けることがある、という現象が置きました。
ちょっとはまってます、、、><

<?
header( 'Content-Type: text/html;charset=Shift_JIS' );

echo( "<html>\n" );
echo( "<head>\n" );
echo( "<title>文字送信テスト</title>\n" );
echo( "</head>\n") ;
echo( "<body>\n" );

if(isset($mode) == FALSE || $mode == ""){

echo( "<form action=\"test.php\" method=\"post\">\n" );
echo( "<input type=\"hidden\" name=\"mode\" value=\"1\">\n");

echo( "<input type=\"text\" name=\"KANA\" istyle=\"1\"><br>\n" );
echo( "<input type=\"submit\" name=\"\" value=\"送信\">\n" );
echo( "<input type=\"reset\" value=\"クリア\">\n" );
echo( "</form>\n" );

}else{

echo("KANA=$KANA<br>\n");

}

echo("</body>\n");
echo("</html>\n");

?>

このQ&Aに関連する最新のQ&A

A 回答 (5件)

PHPメーリングリストの過去ログで、こんなの見つけました



「[PHP-users 3054] Re: SJIS->EUC bug ?」より抜粋
-------------------------------------------------
PHP4.0.3pl1+jstring moduleとPHP4.0.6 with mbstringでは、文字コード判定
ルーチンに変更があり、挙動が変わっているため、同じスクリプトでも
文字化けが発生する可能性がある。
文字コード判定ミスに関してはPHP4.0.3pl1+jstring moduleでも起こりうるので
文字コード判定を助けるため<FORM ~>と</FORM>の間に、たとえば
<input type="hidden" value="日本語判定用文字列">等を埋め込むとよい。
文字列は、判定を助けるために十分な長さの物を指定した方がよいようだ。
-------------------------------------------------

やっぱり、おまじないは必要なんですね。
    • good
    • 0
この回答へのお礼

おおお!なんてグッドな回答!!(≧▽≦)b
本当にそういう解決法でよかったんですね~^^

こういう問題って検索するの、大変ですよね!(なんてキーワード打ってよいやら^^;
スバリな回答見つけてくださって、どうもありがとうございました~!!m(_ _)m

お礼日時:2001/11/27 23:53

おお、ようやくご存じの方の回答が付きましたね。

(^_^)
ところで、

>質問締め切りの際は、ぜひポイントをもらってくださいね^^

ということですが、そのお気持ちだけ有り難く頂いておきます。
それよりも、NIGHT2000さんのお役に立った方に差し上げてください。
心のこもったお礼だけで充分です。(ポイントよりも嬉しいです)
納得のいく回答が頂けると良いですね。(^_^)
    • good
    • 0
この回答へのお礼

たびたびどうもありがとうです!^^
おかげさまでよい回答を得ることが出来ました。

不可思議な現象にハマってちょっと放置気味(汗)だったので、naturalさんの回答で再度いろいろと試す気力がわき、とても助かりました!^^
捨てずに質問してみてよかったです~(*^-^*)

本当にどうもありがとうございました!m(_ _)m

お礼日時:2001/11/27 23:52

「その解決方法に異議あり!」というわけではありませんが、


私の環境で正常に動作するプログラムを紹介します。
IE version5.0
PHP version4.0.6(Miracle Linux Ver.2.0)

確かにNIGHT2000さんのプログラムは文字化けすることを
確認しました。
でも、それをほとんど修正していない私のプログラムは
正常に動作するのです。なぜでしょうか?

「hiddenで全角文字をダミー送信」のおまじないをして
いるPHP3のプログラムを見たことがあります。
でも、4.0.6ではそんなことを意識しなくてもよいと
思っていたのですが間違いなのでしょうか?
詳しい人教えてください。

<?
header( 'Content-Type: text/html;charset=Shift_JIS' );
echo( "<html>\n" );
echo( "<head>\n" );
echo( "<title>文字送信テスト</title>\n" );
echo( "</head>\n") ;
echo( "<body>\n" );

if(empty($sub)){
echo( "<form action=\"test3.php\" method=\"post\">\n" );
echo( "<input type=\"text\" name=\"KANA\" istyle=\"1\"><br>\n" );
echo( "<input type=\"submit\" name=\"sub\" value=\"送信\">\n" );
echo( "<input type=\"reset\" value=\"クリア\">\n" );
echo( "</form>\n" );
}else{
$str = mb_convert_kana($KANA, "KV");
echo("KANA=$str<br>\n");
}
echo("</body>\n");
echo("</html>\n");
?>
    • good
    • 0
この回答へのお礼

うーん、私もこれ(mb_convert_kana)はやってみたのですが、ダメな時がたまにあって、、、^^;
どうしてなんでしょう、、、
ダメな時、というのは最初から(受け取ったときに)化けている場合、のようです^^;

>「hiddenで全角文字をダミー送信」のおまじないをして
>いるPHP3のプログラムを見たことがあります。
>でも、4.0.6ではそんなことを意識しなくてもよいと
>思っていたのですが間違いなのでしょうか?

おおお!?やはり既存の方法だったのですね~^^;
不具合はないのかちょっと心配です、、、(今のところ大丈夫そうですが)

どなたか詳しい方~~!ぜひご教授ください~!m(_ _)m

tomomo0325さん、回答くださってありがとう!^^

お礼日時:2001/11/27 19:19

お礼&補足有り難うございます。



>「ページを読み込んで最初の送信で文字化けし、戻って再送信すると直る」という現象が起きています。><

なるほど、不可思議ですね~。(^_^;
これに関してはPHPをご存じの方でないと解らないと思いますので、他の方の回答に期待しましょう。

さて、的外れかもしれませんが、もう2,3心当たりを挙げてみたいと思います。

>ちなみに実際は、受け取った後、半角だったら全角に変換して使用する、というソースにしています。

ということですが、一度test.phpの最初に変数KANAに対して無条件で変換関数を使用してみて頂けますか?
h2zの場合、半角カナ以外の部分には全く影響を及ぼさないのでこのような使い方をしても問題ないのですが、そうでない場合は結構です。

もう一点です。
h2z_xxxは実際にはh2z_sjisやh2z_jis、h2z_eucといった形で使用されます。
もしもPHPの関数にも文字コードによる使い分けがあれば、他のコードで一度お試し下さい。

何れも的外れの場合はご容赦を。(^_^;

#「補足入力のみだと回答を強要しているようで」→大丈夫、そんなことはありませんよ。(^_^)
    • good
    • 0
この回答へのお礼

再度回答ありがとうございます!!^^

>一度test.phpの最初に変数KANAに対して無条件で変換関数を使用してみて頂けますか

やってみたのですが、やはり最初から化けている(しかも漢字になっている)ため変換もうまく行きませんでした。
でもいろいろ考えてくださってどうもありがとうございます^^

実は!ある方法で解決いたしました!^^;
半角カナをinputタグで送るとき、一緒にhiddenででも全角文字をダミー送信するだけで、文字化けが回避できました!(なぜに!?^^;

というわけで、その解決方法に異議あり!という方のために、もう少し回答受付中に(しつこい^^;)しておきます。

>#「補足入力のみだと回答を強要しているようで」→大丈夫、そんなことはありませんよ。(^_^)

重ね重ねどうもありがとうです(*^^*)
質問締め切りの際は、ぜひポイントをもらってくださいね^^

お礼日時:2001/11/27 17:10

私はPerlでCGIを作成していますので、この場合の具体的な解決方法は提示出来ませんがご容赦下さい。


Perlの場合も先頭からの半角カナは文字化けを起こします。
半角カナを送る限り回避のしようがありません。
ですので、Perlの関数を用いてテキスト中の半角カナのみを全て全角カナに変換します。
こうすれば勿論文字化けは防げますよね。
問題はPHPにPerlでいうところのh2z_xxx(半角カナ→全角カナに変換する関数。xxxは文字コードを指定。)があるかどうかです。
これに該当する機能があるのであれば、全角カナに変換する方法が確実だと思います。

#念のため、h2z_xxxはjcode.plという日本語ライブラリに用意されている関数です。

この回答への補足

アドバイスありがとうございます。^^

>先頭からの半角カナは文字化け

説明が不十分ですみません^^;
「ページを読み込んで最初の送信で文字化けし、戻って再送信すると直る」という現象が起きています。><

>Perlの関数を用いてテキスト中の半角カナのみを全て全角カナに変換

はい^^
PHPにもその関数が存在します。
ちなみに実際は、受け取った後、半角だったら全角に変換して使用する、というソースにしています。
しかし、今の現象では次のページで受け取ったときにすでに化けていてどうしようもないんです~><
たとえば、「カン」と半角カナで入力すると、次のページでは「菌」になって入ってきます^^;

やはり、半角カナは使うな~!で終わらせるしかないのでしょうか、、、^^;

とりあえず今の私の環境は以下です。
IE version4.72
Netscape(R) Communicator 4.73
PHP version4.06

補足日時:2001/11/27 13:53
    • good
    • 0
この回答へのお礼

補足入力のみだと回答を強要しているようでなんなので、完結的にお礼を、、、^^;

この問題についてはまだしばらく受け付け中にしていますが、私のほうでもいろいろまた試してみます。

お答え頂きありがとうございました^^

お礼日時:2001/11/27 14:25

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q文字化けメールの修復方法は?

文字化けメールが届いてしまいました。
エンコードの問題ではないようです。修復する方法はありますか?

Aベストアンサー

以下のHPで、もしかしたら読めるかもしれません。

参考URL:http://www.kanzaki.com/docs/jis-recover.html

Qprint "\n";の0.pingの0てなんでしょうか?

以下のprint "<img src=\"0.jpg\/>\n";の0てなんでしょうか?
 ファイル名でしょうか?以下プログラムです。
  よろしくお願いいたします。(馬鹿な質問ばかりですみません_ _)
<!DOCTYPE html>
<html>
<head>
<title>P121 指定した多数の画像を出力する 5-4</title>
</head>
<body>

<?php

$num = 10;

for($i=0; $i<$num; $i++){
print "<img src=\"0.jpg\/>\n";
}

?>

</body>
</html>

Aベストアンサー

>print "<img src=\"0.jpg\/>\n";
この行は間違っていますが、何かの参考書から引用したものですか?
元の物とよく見比べてみてください。
これでは、正常なHTML文は作成出来ません。

問題の意味が不明ですが、これをみると「0.jpg」と言う画像ファイルで、仰るとおり「ファイル名」です。
しかし、上記のように間違っているものなので、本来「ファイル名」なのか疑問です。

Qメールが全部文字化け!どうすれば修復できますか?

outlookexpress6を使用しています。

ある日突然受信トレイにあるメール内容がすべて文字化けされてしまいました。
どうしたらいいのでしょう・・

元にもどるのでしょうか。。。

エンコード設定でunicode utf8にしたら、自分のメールから自分のメールに送ったらうまくおくれたのですが、外部からおくられてくるメールはいまだに文字化けのままです。。。
受信トレイにたまったメールもすべて文字化けのままなので修復したいです。

お詳しい方どうぞアドバイスよろしくお願いします!

Aベストアンサー

次の操作を試してみてください。

1.[ツール]→[オプション]を実行
2.[読み取り]タブを選択
  2.1.[エンコード]→“日本語(自動選択)”
  2.2.[既定に設定]をクリック ← これ重要!
  2.3.[OK]をクリック

Q

お世話になります。
<form method="POST" action="wp.php" id="InputFrm">
<textarea>
$Contents
</textarea>
というようにして、
でhtml文書を作成し、$Contentsへその文字列を格納しPOSTで書き込み読み込みおよび表示用のwp.phpへ送っています。
wp.phpでは、テキストファイルへ$Contentsの内容を書き込んでいます。
すると、
<div style="***"> が <div style=\"***\">のようになってしまいます。
つまり、「"」が「\"」と変わってしまいます。
$ContentsDsp=str_replace("\\\"","\"", $Contents);
で、対応はしていますが、「"」が「\"」となるのは何故でしょうか。
基本的なところがわかっていないようで、基本がよくわかっていないだけに調べても解決できません。
おわかりになる方見えましたら教えていただけないでしょうか。

Aベストアンサー

エスケープされてしまうのを防ぎたいという質問と理解しました。

php.iniの中で「magic_quotes_gpc」が「ON」になってると働く機能です。
「マジッククォート」で検索すると詳しく判るでしょう。
これはこれで便利な機能なんですけどね。

Q 文字化けの修復方法

windouws 98 NEC ノートパソコンで
文字化けしてしまい一般的な修復方法の
セーフモードにして再起動するとよく直っていたんですが今回は直りませんでした。
セーフモード中は直って普通に見えるのですが
再起動で立ち上げるとま文字化けしてしまいます
何か良い改善方法をおしえてください。
お願いします。

Aベストアンサー

参考URLをご覧のうえ、対処してください。

参考URL:http://homepage2.nifty.com/winfaq/fontstrouble.html

Qphpの
\nと\nとエスケープシーケンスについて

現在、phpを学んでいるのですが、いきなり"<br>\n"と"\n"の違いがわからなくて困っています。\nはエスケープシーケンスで改行を意味するのですよね?<br>も改行を意味するから・・・わざわざダブルクォーテーションの中に<br>を書かなくても良いのでは・・・
と思うのですが・・・違うのでしょうか!?

またエスケープシーケンスについてなのですが、
¥を付けて表す特殊文字がエスケープシーケンスなのですね。
しかし、シングルクォーテーション内では「¥’」と「\\」だけが使える。
ダブルクォーテーション内では記述すると画面に表示されないということですが・・・。
ではエスケープシーケンスっていつ使うのですか?使い道がないような気がするのですが・・・・。
使えるのは、シングルクォーテーション内の「¥’」と「\\」だけになるのでは・・・・。
そのへんのところを教えてください。

Aベストアンサー

<br>はHTMLを言語としてではなくレイアウトとして表示した際の改行。
\nはHTMLを言語として表示した際の改行。

試しに<br>をなくしてブラウザからアクセスしてみれば
レイアウト上は改行されてないでしょう。
試しに\nをなくしてブラウザからアクセスし、ソースを表示してみれば
ソースは改行されていないでしょう。

エスケープシーケンスに関しては、例えば以下のコードがあった時。
echo 'abc'def';
これは文法エラーになります。なぜならdの前の'で文字列として完結している為です。
それを防ぎ、'を画面上に表示する為にエスケープシーケンスを利用して
以下のようにします。
echo 'abc\'def';

文字列を"で表現した場合に'を表示したい時は以下になります。
echo "abc'def";
ここでエスケープシーケンスを利用しない理由は、'によって文字列として
完結しないからです。
逆に"を表示したい時は以下のようになります。
echo "abc\"def";

"内でエスケープシーケンスを利用して文字列を表示しようとすると
画面に表示されないという事はありません。

<br>はHTMLを言語としてではなくレイアウトとして表示した際の改行。
\nはHTMLを言語として表示した際の改行。

試しに<br>をなくしてブラウザからアクセスしてみれば
レイアウト上は改行されてないでしょう。
試しに\nをなくしてブラウザからアクセスし、ソースを表示してみれば
ソースは改行されていないでしょう。

エスケープシーケンスに関しては、例えば以下のコードがあった時。
echo 'abc'def';
これは文法エラーになります。なぜならdの前の'で文字列として完結している為です。
それを防ぎ、...続きを読む

Q文字化けしたワードファイルの修復方法を教えてください

word2003で作成し、保存していた文書を、同じパソコンのword2003で開いたら文字化けしていました。
以前見たときは正常に表示されていて、その後何か操作をした覚えもありません。
文字化けした部分は□が並んだようになっています。

教えてgooの過去の質問や、他のサイトをみて解決方法を調べ、フォントを変える、htmlファイルやrtfファイルで保存しなおす、ワードパッとにコピーする、等色々試して見ましたが直りません。

大切な文書でしたので、修復方法をお教えください。
お願いします。

Aベストアンサー

☐の部分は、文字(文字コード)であったことは確実ですか。
例えば1例でも、(元は)どんな内容か思い出せますか。
正しく表示されていたころは、質問者はそれを見た事を覚えていますか。
ところどころ、少ない部分だけですか。
その後何か特別なことをした、ことは思い出せませんか。
ーー
「文字化け」というのは文字コード(体系)の問題だと思います。間接的にFontなどと関連しますが直接的ではないと思う。
もがいている方向性が疑問に思ったもので。
http://www.asahi-net.or.jp/~ax2s-kmtn/character.html
本質問の解決に直接役に立たないと思うが、参考までに見て置いてください。
何か思い当たる点は無いですか。
上記WEBにもある、機種依存文字など関係ないですか。
文書やファイル作成時に使われた文字コード体系がファイルに記録されるとはっきりするが、そういうOSの仕組みではないようなので難しい。

Qプログラムの中の public $name = "姓名"; public $age = 20;

以下のプログラムの中に
public $name = "姓名";
public $age = 20;
 があります。なくても表示自体に影響はないのですが、何の目的であるのでしょうか!?
以下問題のプログラムです。 よろしくお願いいたします
--------------------------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<title>P251 Sample8-2 複数のオプションを作成する</title>
</head>
<body>

<?php
#$は変数の宣言
$pr1 = new Person;
$pr1->name = "鈴木";
$pr1->age = 56;

$pr2 = new Person;
$pr2->name = "佐藤";
$pr2->age = 38;

?>
<table border="2">
<tr bgcolor="#AAAAAA">
<th>名前</th>
<th>年齢</th>
</tr>

<?php

print "<tr><td>";#特に<tr>がなくてもOK
print $pr1->getnam();
print "</td><td>";#特に</td>がなくてもOKでした。
print $pr1->getage();
print "</td></tr>";#特になくても表の2行目表自体は影響はなかった。

print "<tr><td>";
print $pr2->getnam();
print "</td><td>";
print $pr2->getage();
print "</td></tr>";

?>

</table>
<?php

class Person

{
public $name = "姓名";
public $age = 20;

function getnam(){return $this->name;}
function getage(){return$this->age;}
}

?>

</body>
</html>

以下のプログラムの中に
public $name = "姓名";
public $age = 20;
 があります。なくても表示自体に影響はないのですが、何の目的であるのでしょうか!?
以下問題のプログラムです。 よろしくお願いいたします
--------------------------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<title>P251 Sample8-2 複数のオプションを作成する</title>
</head>
<body>

<?php
#$は変数の宣言
$pr1 = new Person;
$pr1->name = "鈴木";
$pr1->age = 56;

...続きを読む

Aベストアンサー

変数の置き場を、メモリー上に確保するためです。
前者は文字として、後者は数値として。

Q文字化けしたフランス語のメールを修復するには?

フランス語のメールが文字化けしてしまい、
うまく読めなくなってしまいました。

すでに難しい漢字などが紛れてしまった文章を
修復できるようなフリーソフトなどはございませんか?
またはPCの簡単な設定で修復する方法がありますか?
こちら、windows vistaです。
初心者でもわかりやすいものがあれば教えてください。

よろしくお願いいたします。

Aベストアンサー

duosonic です。お疲れ様でした。
ユードラって亜流です、ハッキリ言って。もともとマック用にデザインされた?らしいので、Windowsとは相性悪いのもうなづけます。そもそもライブドアホリエモンが関わっているというだけで、僕の中ではボツです (^^;)

Vistaには Windows Mailが入っていますよね。それで再生できませんかね?

>>あいさつ程度のフランス語しかできませんので、差出人のフランス人にもう一度送って~なんていうことを言えるかどうか・・・(;_;)
>あそうなんですか。何と申し上げて良いのやら 、、、(-_-;)

通じるか否か分からないフランス語で書くよりも、英語で出しちゃうのは手ですよ。欧州人は大抵英語大丈夫ですから。(僕の回答歴?ご覧頂くとお分かりかと思いますが、)英語ならいくらでもお教えいたしますので、ご安心下さい。或いは、フランス語を書けるだけ書いて、外国語?カテで内容が大丈夫か聞いてくるのも手です。


ご参考までに。

Q$ka = $_REQUEST[\"FFF\"];が変数に代入できなくて困ってます┐(´~`;)┌

今任意の名前でファイルを生成するPHPを作っています。ファイルの中身に$ka = $_REQUEST[\"FFF\"];というコードをファイル作成時に書き込みたいんですが、どうも変数 $HTMLにうまく代入されてくれません。もし、どこが問題なのかわかる方どなたかいらっしゃいましたらアドバイスお願いしますΣo(≧~≦)o。


下にコードを書いておきます。


<form name="form" action="A.php" method="POST">
HTMLファイルの名前
<input name="DAI" type="text">
<input type="submit" value="作成">
</form>
<?php
$DAI = $_REQUEST["DAI"];
?>





<!-- 【この下のコード$ka = $_REQUEST[\"FFF\"];がうまく変数$HTMLに代入されません】 -->
<? $HTML="$ka = $_REQUEST[\"FFF\"];" ?>





<?php
$fp = fopen("$DAI.php","a");
fputs($fp,$HTML);
fclose($fp);
echo "ファイル作成成功!";
?>
<?
print"$DAIが作成されました";
?>
<?
print"<A href=\"http://localhost/$DAI.php\">作成された貴方のファイルへのリンク</A>";
?>

今任意の名前でファイルを生成するPHPを作っています。ファイルの中身に$ka = $_REQUEST[\"FFF\"];というコードをファイル作成時に書き込みたいんですが、どうも変数 $HTMLにうまく代入されてくれません。もし、どこが問題なのかわかる方どなたかいらっしゃいましたらアドバイスお願いしますΣo(≧~≦)o。


下にコードを書いておきます。


<form name="form" action="A.php" method="POST">
HTMLファイルの名前
<input name="DAI" type="text">
<input type="submit" value="作成">
</form>
<?p...続きを読む

Aベストアンサー

<? $HTML='$ka = $_REQUEST["FFF"];' ?>
こういうことでしょうか?

シングルクォートは変数を評価しません。


人気Q&Aランキング

おすすめ情報