環境依存文字の「ハート」マークを送信すると文字化け

このQ&Aのポイント
  • フォームの入力欄に環境依存文字の「(ハート)」マークを入力し、「送信」と表示されたボタンを押すと、画面上のボタンは全て消えてしまい、「(ハート)」マークと入力した欄には、「⊇」と表示されて他の入力欄に表示されるはずの日本語文字が文字化けした状態で表示されます。表示のみとなる日本語部分や半角表示部分は文字化けしていません。
  • 「送信」を押された場合のロジックにprint($_POST['submit']);でボタンの名称表示を入れてみると「送信」ではなく「瘧竅」と表示されます。 「送信」ボタンのhtmlソースは、次のような書き方です。<input name="submit" value="送信" type="submit" />
  • 「(ハート)」マークと入力して送信を押した場合でも、ボタンが消えず、「送信」を押しても$_POST['submit']の中身が「送信」となるようにするにはどうしたらよいのでしょうか?
回答を見る
  • ベストアンサー

環境依存文字の「ハート」マークを送信すると文字化け

フォームの入力欄に環境依存文字の「(ハート)」マークを入力し、「送信」と表示されたボタンを押すと、 画面上のボタンは全て消えてしまい、「(ハート)」マークと入力した欄には、「⊇」と表示されて他の入力欄に表示されるはずの日本語文字が文字化けした状態で表示されます。 (表示のみとなる日本語部分や半角表示部分は文字化けしていません。) 「送信」を押された場合のロジックにprint($_POST['submit']);でボタンの名称表示を入れてみると「送信」ではなく「瘧竅」と表示されます。 「送信」ボタンのhtmlソースは、次のような書き方です。 <input name="submit" value="送信" type="submit" /> ちなみに、「(ハート)」マークを入力するとハート文字の選択肢が表示されて、「(ハート)」マークの右隣には、環境依存文字(unicode)表示されます。 また「(ハート)」マーク以外の環境依存文字の(株)や普通の日本語は全く問題なく処理ができますし、「送信」押してもprint($_POST['submit']);の結果は「送信」となります。 「(ハート)」マークと入力して送信を押した場合でも、ボタンが消えず、「送信」を押しても$_POST['submit']の中身が「送信」となるようにするにはどうしたらよいのでしょうか? ■各種設定 http://hain.jp/index.php/tech-j/2007/02/13/%EF%BC%B0%EF%BC%A8%EF%BC%B0%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91のページを参考に設定しました。 (1)HTMLの<HEAD>タグ内への記述 <Meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> (2)php.iniの設定 mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = EUC-JP,SJIS,JIS,UTF-8,ASCII mbstring.substitute_character = none; ;default_charset = "Shift_JIS" (default_charsetはコメントにしてあります。) ■環境 windows vista xampp/apache 2.2.4 PHP Version 5.2.3

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • memphis
  • ベストアンサー率40% (975/2395)
回答No.2

UTFへの変更は設定だけでなく、 日本語を使っているファイルは全てUTFに変換して保存しないと文字化けします。

yanagihk
質問者

お礼

ご回答ありがとうございます。 関連する全てのファイル(PHPのソース)がEUC-JPで保存されています。 これらのファイルを日本語も含めてUTF-8に一括変換をしたい、もしくは指定した一つのファイルに対して一つ一つの手直し無しでUTF-8に一括変換したいのですが、よい方法はないのでしょうか? 私の知識では、エディッタでソースを開き、UTF-8に読み込み直して、日本語部分を一つ一つ入力し直し、保存する方法しか分かりません。

yanagihk
質問者

補足

あれから自分なりに調べて試行錯誤したところ、全てのファイルをUTF-8に一括変換したところ、 ハートマークは処理で扱えるようになりましたが、SJISのDBへはさすがにINSERTできませんでした。 本当に助かりました。 ありがとうございました。

その他の回答 (1)

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

フォームの文字コードがEUCなのに、ハートマーク(UTFの文字コード)を使おうとしているのが原因でしょう。 フォームをEUCからUTFに変更すればハートマークも使えるようになります。

yanagihk
質問者

お礼

ご回答ありがとうございます。 下記の内容のみ変えてみたら画面の大半が文字化けしていましたが、入力欄に「ハート」マークを入力して「送信」ボタンを押したら全てのボタンはいまだに消えしまい、画面の大半は文字化けした状態ですが、入力欄に「ハート」マークが表示されたままとなりました。 どうすれば画面全体が文字化けせずにハートマークも使えるようになるのでしょうか? (1)HTMLソースの記述 <Meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">               ↓ <Meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> (2)php.iniの設定 mbstring.internal_encoding = EUC-JP         ↓ mbstring.internal_encoding = UTF-8 mbstring.detect_order = EUC-JP,SJIS,JIS,UTF-8,ASCII         ↓ mbstring.detect_order = UTF-8,EUC-JP,SJIS,JIS,ASCII (3)プログラムソース(画面を表示する直前の処理) header('Content-Type: text/html; charset=EUC-JP');          ↓ header('Content-Type: text/html; charset=UTF-8');

関連するQ&A

  • php 文字化けについて

    はじめまして、phpについて質問があります。 最近、PHP入門の本を買ってphpインストールをして、成功しました。 しかし、プログラムで「Hello」など英語は表示できるんですが、「こんにちは、世界!」など日本語で表示させようすると「??????A??E?I」となって文字化けします。 いろいろと調べましたが、どのようにすればいいか分からないまま2週間過ぎました。どなたか教えてくださいお願いします。 以下設定情報です↓ XP Apache2.059 PHP5.2.1 php.ini 447:default_charset=EUC-JP 1165:mbstring.language=Japanese 1170:mbstring.internal_encoding=EUC=JP 1173:mbstring.http_input = auto 1177:mbstring.http_output = EUC-JP 1184:mbstring.encoding_translation = On 1188:mbstring.detect_order = auto 1192:mbstring.substitute_character = none;

    • ベストアンサー
    • PHP
  • 文字化けについて

    現在PHPでの開発をおこなっています。 環境はWindows2000、Webサーバー『APACHE』、PHP『php-4.2.0-Win32』を使用しております。 Mysqlも接続でき、Web上でも表示ができるようになったのですが、文字化けを起こしてしまいます。以前カタカナの『ソ』が文字化けを起してしまったので、その時は『php.ini』ファイルの ・output_bufferring = Off ・default_charset = EUC-JP ・mbstring.http_input = auto ・mbstring.http_output = EUC_JP ・mbstring.internal_encoding = EUC_JP ・mbstring.substitute_character = none ・register_globals = On と7箇所設定を変えました。自分で作成したソースもEUCで保存してるんですけど、 文字化けが起こってしまいます。 どうしたらよろしいでしょうか? お分かりになる方がおられましたらよろしくお願い致します。

    • 締切済み
    • PHP
  • postの引渡しで文字化け

    海外の投稿ソフト(掲示板のようなもの)をダウンロードして使ってみました。 マルチバイト対応で、通常の画面(php)には日本語が表示されました。 しかし、文章を書いて、それを確認する画面に移動すると、その書いた文章のみ文字化けしてしまいます。 *テキストエリアに記入した日本語のみ文字化けしてしまいます。 対策として 1、メタタグ <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> 2、accept-charset <form method="post" accept-charset="EUC-JP" action="・・・> 3、.htaccess php_value AddDefaultCharset EUC-JP php_flag output_buffering Off php_value default_charset EUC-JP php_value mbstring.language Japanese php_flag mbstring.encoding_translation On php_value mbstring.http_input EUC-JP php_value mbstring.http_output EUC-JP php_value mbstring.internal_encoding EUC-JP php_flag mbstring.substitute_character none php_value mbstring.detect_order EUC-JP,ASCII,JIS,UTF-8,SJIS とすべて、EUC-JPにそろえましたが、文字化けしてしまいます。 文字化けの種類から察するに、EUC-JPで書いた日本語が、確認画面では、ISO-8859-1に変えられているようです。 何が原因で、どうすればいいのか教えていただけると嬉しいです。 よろしくお願いいたします。 php は4.3.11 Apacheは 1.3.34です。

    • ベストアンサー
    • PHP
  • php,mysqlでの文字化け(機種依存文字)について

    機種依存文字「○いち」「(株)」の文字化けがどうしても解消できません。 phpソースに機種依存文字をコーディングした場合には正しく表示されますが、外部より入力した文字をMySQLに格納し、phpにてデータを取り出し表示すると文字化けします(phpmyadminでの表示時点で文字化け)。 「mb_convert_encoding」等にてテストしてみましたが、結果は変わりませんでした。また、phpmyadminにて直接MySQLに入力しても、phpmyadminでもブラウザ(php表示)でも文字化けしてしまいます。 文字コードについて知識が浅く、各環境はデフォルト状態です。 「mbstring.internal_encoding = EUC-JP 」にも関わらず、「character_set_client = utf8」「character_set_results = utf8」としているのに、機種依存文字以外は問題無く表示されております。 1.機種依存文字化けの対応方法 2.正しい環境設定方法(文字コードの統一を行うべき等) ご教授のほど、何卒宜しくお願い致します。 <<環境>> ・windows xp ・UNIX socket 4.1.22 ・phpMyAdmin - 2.11.1 ・Mysql 4.1.21 ・PHP 4.4.7 【Mysql】 character_set_client = utf8 character_set_connection = utf8 character_set_database = utf8 character_set_results = utf8 character_set_server = ujis character_set_system = utf8 【my.cnf】 [client] default-character-set = ujis [mysqld] default-character-set = ujis [mysqldump] default-character-set = ujis 【php.ini】 mbstring.language = Japanese mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.internal_encoding = EUC-JP mbstring.detect_order = auto mbstring.substitute_character = none; ※phpソースには「charset=euc-jp」を記載

    • 締切済み
    • PHP
  • 「塙」と言う文字が文字化けしてしまう

    表題の件で質問させて下さい。 PHPで文字コードをEUCにしたwebアプリケーションを構築しております。 特に何の問題もなく動いていたと思っていたのですが、フォーム等で「塙」と言う文字を入力して、submitした値を表示させると文字化けしてしまいます。 これを表示させるには、どのような対処を行えば良いのでしょうか? いろいろと試してみた結果、 「塙あ」のように、後ろに全角文字が入るとキチンと文字化けせずに表示されるのは確認しました。 (「塙1」のように後ろに半角文字があると「?1」になってしまいます) どなたか対策をご存知の方、いらっしゃいましたらご教授お願いします。 下記の対策は行っています。 ・header("Content-type: text/html; charset=EUC-JP"); ・<meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> ・ファイルをEUC-JPで保存

    • ベストアンサー
    • PHP
  • UTF-8で文字化け

    いつもお世話になっております。 全てのファイルをEUC-JP で作成しております。 Googleマップを使用することになり、1ページだけ UTF-8 で出力したいと思います。 php.ini の設定は以下のようになっております。 -------------------------------------------------- default_charset EUC-JP mbstring.detect_order no value mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input pass mbstring.http_output EUC-JP mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.substitute_character no value -------------------------------------------------- Googleマップを出力するページで以下のようにしたのですが 文字化けが直りません。 map.php -------------------------------------------------- ini_set("default_charset", "UTF-8"); mb_internal_encoding("UTF-8"); 他に設定する箇所はありますでしょうか。 よろしくご教示お願いいたします。 <環境> PHP:4.3.1

    • ベストアンサー
    • PHP
  • PHP 入力値 文字化け

    phpでFormで入力した値(日本語)が文字化けしてしまいます。 環境は WinXp pro apache2.0.59 php 4.4.7 php.iniのおもな設定ですが、 mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; ブラウザからすべてShiftJisで入力されているのですが、 それがうまく EUC-JPに内部エンコードされていません。 mb_convert_encording($str,"EUC-JP","auto")をスクリプト内で 記述するとうまく表示されますが、なんとか設定で文字化けしないよう にできないでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • PHP5.1 + APACHE2 + PostgrSQL8.1 + Eclipse3.2で全角文字の文字化けが

    お世話になります。PHP暦5日その内3日はこの問題で悩んでいます。 EUCとSJISが混在していることが原因だと思うのですが、 その先が進みません。 過去ログなどを読み、EUCに統一することが望ましいことが分かり、 そのつもりで挑戦しているのですがダメダメ君です。 現状では、 PostgrSQLから読み出したデータはEUCで PHP内でprintやechoなどで文字を出力するとSJISとなります。 文字化けを解決する方法お願いします。 ちなみにphp.iniはこんな感じです。 php.ini -------------------------------- default_charset = EUC-JP extension=php_mbstring.dll mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none

    • ベストアンサー
    • PHP
  • phpmyadminで文字化け

    こんにちは、 現在、php5,mysql4で構築しているのですが、 phpmyadminでテーブルに入れた日本語を見ると 文字化けを起こしており、 たぶん、default_charsetだと思うのですが、 何を設定すればよいのでしょうか? MYSQL4 UTF-8 PHP5 mbstring.detect_order auto mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input auto mbstring.http_output SJIS mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.script_encoding no value mbstring.substitute_character no value default_charset no value

    • 締切済み
    • PHP
  • phpでの書き出しでの文字化け解消について

    お世話になります。 SJISを使いたく、php.iniを次のように設定しましたが、まったく文字が読めない状態で書き出されてしまいます。問題点をお教えいただけないでしょうか。 default_charset="Shift_JIS" mbstring.language=Japanese mbstring.internal_encoding=EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation=On mbstring.detect_order=auto また、内部円コーディングのmbstring.internal_encoding=EUC-JP はこれでよいのでしょうか。SJISを使うなら、SJISのほうがよいのでしょうか。 どなたか、お助けいただけないでしょうか。 どうか、よろしくお願いいたします。

    • ベストアンサー
    • PHP