過去の事例で色々と対処してみたのですが、一向に解決しませんのでご質問させて頂きます。
環境はUbuntu8 Apache2 PHP5.2.4 UTF-8で作成しています。
オーダー、お問い合わせの処理の部分で、どうしても確認画面、送信で携帯の方だけが文字化けしてしまいます。(PC、ローマ字は問題ありません)
PCと携帯サイトはphp自体は同じ物を見ていて、読み込むテンプレートと、一部エンコード処理、metaなどを分けている状態です。
対処した事としましては、
apache2のphp.iniの設定を以下いじりました。
mbstring.encoding_translation = On
mbstring.http_input = auto
mbstring.internal_encoding = UTF-8
そしてphp処理内(携帯のみ)で、
mb_http_output("SJIS");
ob_start("mb_output_handler");
としています。
phpinfoで確認しました所、上記設定で反映されております。
勿論ページは問題なく表示されているのですが、フォームに打ち込まれる日本語がうまくエンコードされません。
フォームから飛ばしたPOSTを、
$_POST=mb_convert_encoding($_POST,"SJIS","UTF-8");
等とすると、日本語を何を入力しても「A」とだけ表示され、上記を省いても空か、「xyz」などとなります。
実際にはlolipopのレンタルサーバーに上げて動作させたいのですが、上げた物も同じ動きをします。
何か穴がありましたらご教示頂けませんでしょうか?よろしくお願い致します!
No.2ベストアンサー
- 回答日時:
>とりあえず$_POSTを何らかの配列にしてmb_convertに渡しても変化なしでした・・・
マニュアルでmb_convert_encodingの使い方をよく読んでください。第一引数はarrayではなくstringと指定されていますよ。
基本的なことを知らずに開発しているようなので、一度マニュアルを熟読されてはどうでしょうか。
http://www.php.net/manual/ja/
また、携帯も対応させる目的で出力エンコードをSJISにするのであれば、テンプレートをSJISで記述して出力されるようにするほうが賢明です。なぜUTF-8なのでしょうか?
おっしゃる通りでした…勉強不足でご迷惑お掛け致しました。
テンプレ自体をShift_JISにし、モバイルのみの設定でinternal_encodingをShift_JISにすることで何とかShift_JISを正常に表示出来そうです。
PHP内で変数に入れてしまっている日本語部分はmb_convert_encodingで対処出来そうです。
色々と勉強になりました。ありがとうございました!
No.3
- 回答日時:
だらだらと蛇足
PHPがUTF-8で出力がSJISでmb_output_handlerがONなら
テンプレートはUTF-8でいいと思いますけど。
mbstring.encoding_translation = On
mbstring.http_input = auto
ならリクエスト値は自動で変換されるので基本的には変換作業は必要ありません。
ただし、detect_order が auto だと誤変換することもしばしあります。
一応配列用の文字コード変換関数もあります。
mb_convert_variables()
lolipopなどのレンサバだと入力値自動変換はオフになってますので
.htaccess で設定しないと機能しません。
もしxhtmlのヘッダーを出力してXHTML対応するなら
mb_output_handlerは動作しません。
更に詳しくありがとうございます!
大変勉強になります!
どうやら間違った解釈をしてしまっていたらしく、
コンバートをUTF-8からSJISにしていたのを、
SJISからUTF-8にしましたら、正常に変換されました!
自動でSJISに書き出されるから、内部ではUTF-8に揃えておけよという事なんですね(^^;
detect_orderは何だか挙動が不安定だなと思っておりましたら、
そういう事なんですね・・・
配列用の変換があることには気づきませんでした!
ご親切にありがとうございます!
更に、xhtmlでコーディングしているので、こちらも気をつけます。
補足頂いた内容を見まして、何だかちょっとスッキリしました。
なるほどそういう事だったのかと・・・
勉強不足故に色々とお手間おとりしまして申し訳ないと共に、
お二方には感謝でいっぱいです。ありがとうございます!
No.1
- 回答日時:
>$_POST=mb_convert_encoding($_POST,"SJIS","UTF-8");
$_POSTは配列のスーパーグローバル変数なので、string型を引数にするmb_convert_encodingに渡すとエラーになりそうなのですがエラー出てませんか?
$_POSTに値を代入する行為もあまり良くありません。
そもそもページのエンコードはSJISなんですよね?であればエンコードUTF-8→SJISのエンコード自体必要なくないですか?
テンプレートはSJISで書いてますか?テンプレートと出力しようとしている文字列のエンコードは一致していますか?
情報が少ないので何とも言えませんが、おそらく簡単な問題かと思います。
この回答への補足
早速のご回答ありがとうございます!
$_POSTに関しまして、
なるほど、この使い方は良くないのですね・・・勉強になります。
とりあえずブラウザではエラーは出ていないようです。
PHP自体のエンコーディングがUTF-8だからなのか、テンプレ自体をSJISにしてしまうと、文字化けしてしまいました。
PCはテンプレも全てUTF-8で作成しております。なので携帯もUTF-8で書いてありまして、それをアウトプット時にSJISにしている状態です。
とりあえず$_POSTを何らかの配列にしてmb_convertに渡しても変化なしでした・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mail()で送信したメールのタイ...
-
SQL Serverで文字コードUTF-8
-
文字化け変換方法
-
mb_ereg_replaceに関して
-
CGIを作っています。渡されて来...
-
UTF8メールがLotus Notesで文字...
-
【PHP】mb_convert_encoding...
-
mb_send_mailの2重投稿を防止し...
-
PHP+Postgres 「髙」が文字化け
-
PHPフォームからのメール送信内...
-
SJIS→UTF-8変換後の文字化けに...
-
Access VBA wiht文での実行時エ...
-
SJISで取得した半角カナをUTF-8...
-
mb_convert_encoding で 一部の...
-
送信したメールのタイトルが無...
-
VBAのコマンドボタンの文字列の...
-
エスケープ文字の復帰(¥r)と...
-
ソースコードの1行が長いとき...
-
C++で空Enterの入力を判...
-
メッセージボックスで1025文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
phpのメールフォームの完了画面...
-
SQL Serverで文字コードUTF-8
-
PHPmailerでの添付ファイルの文...
-
SJISで取得した半角カナをUTF-8...
-
mb_convert_encoding で 一部の...
-
PHP cURLでPOSTした値が文字化...
-
SJIS→UTF-8変換後の文字化けに...
-
mb_ereg_replaceに関して
-
【PHP】mb_convert_encoding...
-
phpMyAdmin内での文字化け
-
mb_regex_encodingでエンコード...
-
PostgreSQLからCSV形式でエクス...
-
RSSを取得すると文字化けする。
-
postの文字化け防止について
-
UTF8メールがLotus Notesで文字...
-
小さいひらがな(っ、ょ、ぃ、ゃ...
-
phpでの文字エンコード
-
php自動返信メール本文の一部の...
-
mail()で送信したメールのタイ...
おすすめ情報