• 締切済み

FORMからの文字入力文字化け

「.htaccess」で設定した場合、正常に動作するのですが、「自作スクリプト内」でPHP環境を設定すると文字化けします。 フリーの掲示板が「.htaccess」で設定した場合、文字化けしますので、自作スクリプトも今回からスクリプト内部からPHP環境を設定し動作確認をしています。 FORMからの文字入力だけが文字化けしてしまうのですが、解決方法が見出せずに困っています。 また、「mbstring.encoding_translation」の設定方法がわからずに設定していないため、入力文字化けするのでしょうか。 表示だけは、文字化けせずに表示されます。FORMからの入力文字だけが文字化けします。 解決方法をご存知の方がいらっしゃいましたらご教授のほど宜しくお願いします。 # .htaccessで設定する場合 php_flag output_buffering "On" php_value output_handler "mb_output_handler" php_value default_charset "Shift_JIS" php_value mbstring.language "Japanese" php_value mbstring.internal_encoding "EUC-JP" php_value mbstring.http_input "auto" php_value mbstring.http_output "SJIS" php_value mbstring.detect_order "auto" php_flag mbstring.substitute_character "none" php_flag mbstring.encoding_translation "On" # 自作スクリプト内で設定する場合 ini_set("output_buffering", "On"); ini_set("output_handler", "mb_output_handler"); ini_set("default_charset", "Shift_JIS"); mb_language("Japanese"); mb_internal_encoding ("EUC-JP"); mb_http_input("auto"); mb_http_output("SJIS"); mb_detect_order("auto"); mb_substitute_character("none"); ob_start("mb_output_handler");

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

みんなの回答

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

.htaccessでスクリプト別に設定できないんでしょうか? <Directory "/path/to/script/"> php_value mbstring.http_input "auto" php_flag mbstring.encoding_translation on </Directory> ロリポップはたぶん mbstring.http_input pass mbstring.encoding_translation Off のような設定だったと思うので mb_convert_variables("EUC-JP", "auto", $_POST); あたりで変換してみては。

参考URL:
http://search.net-newbie.com/php/function.mb-convert-variables.html
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

フォーム入力はhttp_inputあたりが関係してきますが、 input関連はスクリプト内で設定しても効果ありません。 php.iniや.htaccessでエンコーディング指定するか、 passにしてスクリプト内で自前エンコーディングする必要があるかと。 PHPマニュアルのどこかに書いてあったような。

marinebeer
質問者

お礼

使用しているレンタルサーバーがロリポップの為、フォルダ単位にもphp.iniが使えません。 ハッスルだとフォルダ単位にphp.iniが指定できるので便利ですが・・・。 結局、文字コード変換を組み込まないとダメですかね!! 「.htaccess」で設定すれば問題ないのですが、それだとこんどはフリーの掲示板が文字化けするし、どっちつかずの状態で!! 以下の設定に変更してもダメ!! ini_set("output_buffering", "On"); ini_set("output_handler", "mb_output_handler"); ini_set("default_charset", "Shift_JIS"); ini_set("mbstring.language", "Japanese"); ini_set("mbstring.internal_encoding", "EUC-JP"); ini_set("mbstring.http_input", "auto"); ini_set("mbstring.http_output", "SJIS"); ini_set("mbstring.detect_order", "auto"); ini_set("mbstring.substitute_character", "none"); ini_set("mbstring.encoding_translation", "On"); ob_start("mb_output_handler");

関連するQ&A

  • 一部の文字のみ文字化けします

    phpでXMLを生成しています。 XMLをエディターで見るとほとんどの文字は正常に表示されているのですが、一部の文字だけが文字化けしています。 具体的には 究、岩、ど の三つの文字だけです。 その三つの文字はいずれも同じ文字に文字化けしています。 cを丸で囲ったコピーライトの表記に使われる文字に似ています。 上記の文字のみなにかコピーライトに引っかかっているのでしょうか。 googleで色々と調べてみましたが、他の文字での文字化けの事例はあるのですが、上記の文字での事例は見つかりませんでした。 どなたかご教示願えませんでしょうか。 phpのバージョンはPHP Version 5.3.3です。 phpのあるディレクトリと同じディレクトリにhtaccessで以下の記述を入れています。 php_value mbstring.internal_encoding UTF-8 php_value default_charset UTF-8 php_value mbstring.http_output UTF-8 php_value mbstring.language UTF-8 php_value mbstring.http_input auto php_flag mbstring.encoding_translation On php_value output_handler mb_output_handler

    • ベストアンサー
    • PHP
  • 入力フォームの文字化け

    PHPのショッピングカートを利用させていただいてます 住所を入力後→確認画面を開くと住所欄の一部が文字化けしてしまいます 例えば「能登半島」と入力すると 確認画面では「能\登半島」と出力されるのです 必ず文字を化けを起こすわけではなく 住所によっては文字化けしません 尚、IEではこの症状はなく Firefoxやサファリでこの現象が起きます .htaccessの設定はこんな設定をしています php_value mbstring.language Japanese php_flag mbstring.encoding_translation On php_value mbstring.script_encoding SJIS php_value mbstring.internal_encoding SJIS

    • 締切済み
    • PHP
  • 携帯サイトで稀に文字化けしてしまいます。

    PHP+MySQLで携帯サイトを構築しています。 DBと各ファイルのエンコードはEUC-JPで、携帯対応するために 出力のみhtaccessにてSJISにしております。 また、入力フォーム等もあるためhtaccessに下記を記述したところ、 基本的には問題なく表示するのですが、更新を繰り返すと5~10回に1回ほど文字化けを起こします。 #htaccess内の記述--- php_value output_handler mb_output_handler php_value default_charset Shift_JIS php_value mbstring.language Japanese php_flag mbstring.encoding_translation 0 php_value mbstring.http_input auto php_value mbstring.http_output SJIS php_value mbstring.internal_encoding EUC-JP php_value mbstring.substitute_character none #------------------- それも、現時点で確認している状況では ・db.phpというファイル内でDBからデータを取得し、その中でdumpした場合はまったく文字化けせずSJISで表示 ・index.html内に日本語を記述しても文字化けなくSJISで表示 ・main.php内でいろいろなファイルをrequire_once等していると文字化けが発生 (具体的には日本語部分が全て???になったり空白になったりする ソースを開いてエンコードを変えても変化無し) 毎回正常だったり毎回文字化けしていれば分かるのですが、ごく稀にそういう状況が起きてしまっているので困っています。 どなたか知恵をお貸し下さい。 サーバ環境 レンタルサーバ Kagoya Internet Routing(共用) Apacheバージョン Apache/1.3.37 MySQLバージョン 5.0.33 (Ver 14.12 Distrib 5.0.33) PHPバージョン 5.2.5

    • 締切済み
    • 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
  • 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でCSS対応させ文字コードを変更する方法

    phpで、i-mode対応CSSを使用し、EUCのMySQLのデータをShift-JISで表示させたい、というものです。 .htaccess 内で、 php_flag output_buffering On php_value output_handler mb_output_handler php_value default_charset Shift_JIS php_value mbstring.language Japanese php_flag mbstring.encoding_translation On php_value mbstring.http_input auto php_value mbstring.http_output SJIS php_value mbstring.internal_encoding EUC-JP php_value mbstring.substitute_character none php_value mbstring.script_encoding auto という記述を入れています。 Shift-JISの***.phpで、DBの内容を正しく表示することができています。 CSSに対応させるために、phpファイル内で、 HTTP_USER_AGENT が docomoの場合のみ header("Content-Type:application/xhtml+xml"); ... <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.0) 1.0//EN" "i-xhtml_4ja_10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">..... という記述をして、CSSを使用したいのですが 上記の.htaccess を入れると、CSSは使用できても、文字化けしてしまいます。 .htaccess での文字コードの変換と header("Content-Type:application/xhtml+xml"); を同時に使っているのが原因かと思うのですが、解決方法がわかりません。 テンプレートや関数で変換する方法しかないでしょうか。 解決方法をご存知でしたらお教えください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字化けの原因を教えてください。

    WindowsでスクリプトをEUCで保存し、シフトJISでブラウザへ出力ときの 設定として以下のようにphp.iniを設定しています。 ~php.ini~ output_buffering = On output_handler = mb_output_handler magic_quotes_gpc = Off default_charset = Shift_JIS extension_dir = C:/php/ext extension=php_mbstring.dll 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 ~php.ini~ mb_detect_encodingでDBから取得した値の文字コードは、SJISでした。 mb_convert_encoding($dbdata,"EUC-JP","SJIS")で正しく表示されます。 iniファイルの設定のみで正しく表示するにはどのように設定するのがいいのでしょうか?それとも、このような文字コード変換は必須なのでしょうか? よろしくお願いします。 [PHP使用環境] PHP=5.1.6 OS=Windows2000 PRO webserver=apatch2.0 [DB環境(リモートサーバ)] DB=MS SQL Server2000 OS=Windows2003 server R2

    • 締切済み
    • PHP
  • サンダーバードで、全角8文字以降が、文字化け。

    いつもお世話になってます。 さて、PHPで、メールフォームを作ったのですが、 クライアントのメールソフトが、サンダーバードで、 件名の全角8文字以降が、文字化けするようです。 (Outlock等では、文字化けしません) 解決策をご存知の方がいましたら、教えて下さい。 また、環境の情報で不足がありましたら、ご連絡ください。 宜しくお願いいたします。 【環境】 サーバ WebARENA SuiteX PHP 文字コード EUC-JP http://www.arena.ne.jp/suitex/index.html 【htaccessに記載内容】 php_value mbstring.encoding_translation On php_value mbstring.internal_encoding EUC-JP php_value mbstring.http_output EUC-JP php_value mbstring.script_encoding EUC-JP

    • ベストアンサー
    • PHP
  • サーバー移転で文字化け

    ロリポップ!からhetemlにサーバー移転したところ、データベースから取り出したデータが文字化けするようになってしまいました。 因みにmysqlのデータは変換なしでエクスポートし、インポートしております。 ã€ã‚¨ãƒ´ã‚¡ã€‘ã½ã‹æ³ 上記のような文字化けです。 キャラクターセット周りが怪しいと思い、色々試してみましたが一向に治る気配がありません・・。 php varは5.3です。 .htaccessに「AddHandler php5.3-script .php」と記述して使っております。 mysql varはMySQL5.0.51aです。 MySQLのキャラクターセットはこんな感じです。 Variable_name Value character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 phpでの接続はこのようにしております。 mb_language('uni'); mb_internal_encoding('utf-8'); mb_http_input('auto'); mb_http_output('utf-8'); $con = mysql_connect('xxx','xxx','xxx') or die(mysql_error()); mysql_set_charset('utf8'); mysql_select_db('xxx') or die(mysql_error()); php.iniの設定は以下のとおりです。 mbstring.detect_order utf-8 mbstring.encoding_translation off mbstring.func_overload 0 mbstring.http_input pass mbstring.http_output pass mbstring.internal_encoding utf-8 mbstring.language neutral 何をやっても治らず、途方に暮れております。 ご助言をよろしくお願いいたします。

  • MySQLから送られて来たデータの文字化け

    いつもお世話になっています。 今回、phpでmysqlに接続したのですが、mysqlから引っ張ってきたデータが文字化けして困っています。(日本語のみ文字化け) 使っている環境は以下の通りです。 IIS6.0 PHP 5.0.4 MySQL 4.1.22 IISは、CGI、ASP、ISAPIを許可にしています。(.phpを見れるようになっています。) php.iniのmbstringの設定は以下のようになっています。 1105 mbstring.language=Japanes 1110 mbstring.internal_encoding = EUC-JP 1113 mbstring.http_input = auto 1117 mbstring.http_output = SJIS 1124 mbstring.encofing__translation = On 1128 mbstring.detect_order = auto 1132 mbstring.substitute_charecter = auto 1133 mbstring.script_encoding = EUC-JP my.iniの設定は以下のようになっています。 [mysql] default-character-set=sjis [mysqld] default-character-set=sjis skip-character-set-client-handshake mysqlでコマンドで確認したところ以下のような文字設定になっています。 mysql> show variables like "char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | sjis | | character_set_connection | sjis | | character_set_database | sjis | | character_set_results | sjis | | character_set_server | sjis | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ character_set_systemがutf-8になっているのが気がかりですが、 こんな感じで設定しています。 mysql内では文字化けしていないのに、 phpで呼び出した時に文字化けするのでしょうか? どなたかご教授よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう