No.5ベストアンサー
- 回答日時:
No1です。
ひどく脅かしてしまわれたかもしれませんが、個人のサイトで使う分にはあまり気にする必要はないでしょう。しかし送られてきたデータをチェックするのは、PHPの基本を学ぶ以前の問題になってきます(意識的に)。
質問のように疑問を持ったのはいい心がけかと思います。
さて、私が指摘した「METAタグ」による「EUC-JP」のも字コード指定は、おまじない程度に思っていてください。と書きましたが、この辺をもう少し詳しく。
まず、METAタグで指定していない場合は、ブラウザは何を基準に文字コードを決めているのでしょうか。
その答えの1つがMETAタグによる指定ですが、ではMETAタグでEUCとSJISを指定した場合はどうなるのでしょうか(これはブラウザに依存されます)
では、次のパターンは・・・
<HTML>
<HEAD>
<!-- これはSJISで書いた文字 -->
<TITLE>これはSJISで書いた文字</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
さらに、JSPで出力する場合も、METAタグの指定だけでEUCとして表示させようとすると文字化けします。
ここいら変に詳しく載っています。
http://sometime.minidns.net/~ccgi/judgecode.html
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPIN …
http://www.tohoho-web.com/lng/199801/98011002.htm
もし確実に、文字コードを「EUC」にさせたい場合は「METAタグ」で指定するより、以下の方法で。
header("Content-Type: text/html; charset=EUC-JP");
当然の事ながら、上の処理は最初の「<HTML>」をはき出す前に出力してください。
で、完璧にブラウザにEUCで表示させることが出来たとして、それで文字コードの問題は解決するでしょうか。
たいていの場合ブラウザにインターネットエクスプローラーかモジラか、もしくはそこから派生したもの。でしょう。
しかし、JAVAやC言語(もちろんPERLでも)で自作簡易ブラウザを作成することもそう難しくはありません。
あるいは前書いたように、Telnetでサイトを見て回ることも出来ます。以下はその例です。
まず、コマンドプロンプトを立ち上げ、(hogehogehoge.co.jpは架空のドメインです)
>telnet hogehogehoge.co.jp 80
GET /mybbs.php HTTP/1.0
User-Agent: aaaaaa[ja](bbbb)
Host: cccc.co.jp
これで、GETでデータを送信するのも出来そうですね。GETで送れるのだったら、POSTで送ることも出来ます(やり方は書きません)。
POSTで送れる方法がわかれば、あとはEUCやUTFの文字コード対応のエディタで「こんにちは」を書き、SJISやUTFといったEUC以外の文字コードで保存します。次に、今度はその保存したものをEUCで開いてやると・・・。
文字化けしたデータができあがります。
簡単ですね。(^ ^ ;ゞ
あとは、Telnetで送信してあげれば、文字化けした「こんにちは」が送られます。
まぁ、これでも最初にいったように、自分自身のサイトでつくったPHPプログラムであれば、そんなデータを削除してしまえばいいだけのことですが、仕事で誰かにお金をもらってつくったとしたら・・・。
不特定多数の人が見に来る可能性があるプログラムの場合は、「レンタルサーバの設定次第」で違う動作になったり、「古いブラウザでアクセスしてこられると困る・・・」というようなプログラムの作成はなるべく避けてください。
プログラマーにとって一番大事なのは、あらゆる状況を想定してつくる。と、いうことです。(めんどくさいエラー処理もそのためです。確実に開けるとわかるファイルも、開けなかった場合を想定していますよね。この辺はJAVA言語なんかは逆におろそかにすると、コンパイルエラーが出ます。例外という概念がPHPより徹底しているので)
実は、IE(インターネットエクスプローラー)ってちょっと癖がある(他のブラウザももちろんそうですが)ので、たとえば125バイト(だっけ?)受け取らないと表示しないとか、色々プログラマーの予想外の動作をするので、どんなデータが送られてくるかは、永遠の問題でもあります。
PHPになれてきたら自分でSJISからEUCに文字コードを変換するプログラムを作ってみてください。文字コードの問題の深さがわかるでしょう。
できればC言語でやっちゃったりすると、PHPがいかに初心者向きなんだな~。なんて事もわかると思います(もちろんPHPの良さもわかりますよ)。
がんばってください。
No.4
- 回答日時:
こんにちは、
議論に参加させてください。
まず、EUC-JPソースからのフォーム入力という事なので
PC相手の場合には、99%は安心なのではないでしょうか?
><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
と書かれてあるので携帯は対象外みたいですし、
私の知る限り、
HTMLソースのエンコーディングと違う、
エンコーディングデータでポストされてくるのは、
ブラウザは、Lynxだけです。
もっとも、この場合は、SJIS指定でもEUCとして返されるという話になりますので、
話の内容としては、問題ないかと思います。
一点だけ例外としては、SJISで書いていたHTMLフォームを途中でEUCにした場合に、
補助入力の機能を利用すると、SJISで来る場合がありますが、
phpの設定と、スクリプトでインターナルエンコーディングの設定を適切にしておけば、
ある程度は自動的に処理してくれます。
レンタルサーバーの場合、少し注意しないといけないんですけど・・・
いたずらなデータをポストしてくる輩もいますが、
その場合は、まともな文字データではありませんし、
違った観点の対処が必要になるかと思います。
><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
>をいれておけば大丈夫かと思いましたが、これもブラウザによってはできないこともあるでしょうか?
この質問なんですが、
携帯以外で日本語に対応したブラウザでしたら
問題ないと思わないとしかたがないような気がします。
そんなブラウザがあるのでしたら、私も知りたいですね。
携帯でも、auとVodafoneの新型は結構賢いんですけど、DoCoMoはちょいと不安ですね。
思いつくまま、書かせてもらいました。
No.3
- 回答日時:
こんにちは。
No.1で解答したものです。$comment = stripslashes($comment);
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
を書いておけば、EUC-JPとブラウザが判断する確率が高くなりますよ。というおまじないぐらいに思っていてください。また、EUC-JPで表示させても、悪意がある人が文字コードをSJISやその他の文字コードに表示させる可能性や、誤判も十分あり得ますからね。
えっと、Telnetサーバが立ち上がってるか立ち上がってないかに限らず、Telnetを使えばたいていのサーバにアクセスできます。Telnetを使ってSMTPサーバに接続すれば、メールも送信できますし、POPサーバに接続すればメールも受信(というより表示)させることも出来ます。Webサーバに接続すれば、ページを表示(文字だけですが)させることも出来れば、フォームでデータを送信するようにTelnetで送信することも出来ます。
つまり、色々なデータが来ることを予測してつくらないとダメなんですね。ま、この辺に関してもPHPは標準で便利な関数をもっているので、たとえば最低でもTEXTAREAで送られてくるデータのチェックは、以下ぐらいのことはやっておいた方がいいかもしれません。
//●文字コードを変更
if (function_exists(mb_convert_encoding))
$comment = mb_convert_encoding($comment,"EUC-JP","auto");
//●タグを変更する
$comment = str_replace ('<', "<", $comment);
$comment = str_replace ('>', ">", $comment);
//●改行\nを変換
$comment = str_replace("\r\n","\n",$comment);
$comment = ereg_replace("\n{5,}", '<BR>', $comment);
$comment = str_replace("\n\n", '<P>', $comment);
$comment = str_replace("\n", '<BR>', $comment);
//●「,」を全角に変更
$comment = str_replace (",", '、', $comment);
//●「'」を全角に変更
$comment = str_replace ("'", ''', $comment);
$comment = str_replace ('"', '"', $comment);
//●不必要な「\」を消去
$comment = stripslashes($comment);
たぶん、コピペで $comment を変更してもらえればどの環境でも使えると思います。
更に、データ次第でこれに付け足していく感じで進めていってください。
No.2
- 回答日時:
私もPerlの頃から、日本語の問題もあり、EUC-JPを
で統一してきました。
が、心配性なので、何があるかわからんので、コード
の変換はしてきました。
PHPの場合は、
mb_convert_encoding
だけなので、コード変換自体は簡単ですよ。
念のために、私はブラウザーで無理に違った
コードにして(文字化けしている用にしてから)、
送信は試しています。
簡単な送信フォームで使用するスクリプトが
多いので、常連さんだと文字化けてても、配置を
覚えていて、送信する人もいるとは思うので。
ただし、サーバ側の設定で、日本語が優位に
なっていないと、うまく変更できないそうです。
http://ns1.php.gr.jp/pipermail/php-users/2004-Ma …
参考URL:http://okweb.jp/kotaeru_reply.php3?q=1264471
No.1
- 回答日時:
基本的にはそうだと思いますが、あまり保証されないかもしれませんね。
色々なパターンで実験してみるとわかると思いますが、ブラウザ次第という感じでした。
また、見ている人もEUCで表示させてあるかは保証できませんし。(文字化けしたページがよくありますよね)、どちらにしろサーバ側(ここではPHP)で文字コードをチェックするか変換する処理は備えておいた方が無難です。
また、TELNETや自作のクライアントでデータを送ってくる場合もなきにしもあらず。
SJISやUTFで文字列を送る方法はいくらでも考えられます。あまり神経質になる必要はないとは思いますが、そうしたいたずらをされないという保証もありませんしね。
PHPではたいていの場合、標準で文字コードを変換する関数が使えると思うので(設定次第でうまく動作しないこともありますが・・・)、掲示板のように文字列を扱うようなプログラムを作成するにはそういったものを利用するとよいと思います。
ご回答有難うございます!
できない場合もあるかもしれない、ということですね。
>見ている人もEUCで表示させてあるかは保証できませんし
headに
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
をいれておけば大丈夫かと思いましたが、これもブラウザによってはできないこともあるでしょうか?
>どちらにしろサーバ側(ここではPHP)で文字コードをチェックするか変換する処理は備えておいた方が無難です。
仰るとおりですね。チェックして必要なら変換するようにやってみようと思います。(できるかな・・)
また、telnetやIPアドレスを登録されていないssh接続はできないサーバらしいので、その点は大丈夫だと思います。
常識的なことも知らないことが多く、なかなかプログラム作成に時間がかかってしまいますが、なんとか思うようにつくっていけるようがんばります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外国の掲示板で日本語も表示で...
-
EUCからshift_jisに書き換えに...
-
海外で作成されたPHPスクリプト...
-
ブラウザーで日本語が文字化け...
-
透過PNGが透過されない!!
-
データベースへの持続的接続
-
onedrive にexcelファイルをア...
-
MySQLのdatetime型の月日0を削...
-
ラッパークラスって何ですか?
-
.phpと.incファイルの違いはな...
-
ファイルの行数取得
-
バッチを用いたフォルダの自動移動
-
Subversionのリポジトリの削除
-
リンク先を隠す方法はないでし...
-
FTPコマンドでディレクトリごと...
-
include先でのinclude元の変数...
-
PHPで新しいウインドウで開く命...
-
FORMで送信ボタンと戻るボタン...
-
PHPにて外部サイト内容が取得不...
-
ftpでアップロードが出来ない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EclEmmaレポートのエクスポート...
-
ファイルの文字コードを調べる...
-
phpログファイルの文字化けにつ...
-
PHP でデータファイルを別にす...
-
PHPで韓国語の表示がうまくいき...
-
mysql→EUC-JP、php→UTF-8の時の...
-
サイトの文字コード
-
IIS5.1です。PHPをブラウザで開...
-
EUCからshift_jisに書き換えに...
-
外国の掲示板で日本語も表示で...
-
サーバーにアップすると文字化...
-
コード上の埋込み漢字コードの...
-
EUC-JPのサイトをSHIFT-JISに変...
-
PHPでCSVファイルのデータを表...
-
Google Chromeで文字化け
-
海外で作成されたPHPスクリプト...
-
PHPで「®」や特殊文字のエスケープ
-
PHPとMySQLの文字化けの対応法は?
-
検索結果の文字化け
-
ブラウザーで日本語が文字化け...
おすすめ情報