お世話になります
携帯サイトの文字化けに困っています。
MysqlのデータはEUC-JPなので
携帯サイトにデータを出力するのにShift-JSにしないと文字化けするというところまで調べました。
function cnv_dispstr($string) {
// 文字コードを変換する
$det_enc = mb_detect_encoding($string, "Shift-JIS,EUC-JP");
if ($det_enc and $det_enc != ENCDB) {
return mb_convert_encoding($string, ENCDB, $det_enc);
}
else {
return $string;
}
}
このようにしたのですが、
Mysqlから出力したデータ部分の文字化けが解決しません。
アドバイスよろしくお願いします。
No.4ベストアンサー
- 回答日時:
mbstring.internal_encoding=EUC-JP
ところでphpのソースファイルはEUC-JPで保存してますよね?これを間違ってると結局文字化けの嵐にしかならないので。
あと、SQLサーバーの方の文字コードもEUC-JPなら、SQLサーバーとのデータやりとりに文字コード変換は必要無いと思いますけど、一応そちらも確認して下さい。
mbstring.http_output = SJIS
php.iniでこの設定になっているのなら、PCに対しても携帯に対しても、ページ出力はみなShift-JISとしてしまうのが面倒がなさそうですね。
metaタグのcharset記述は、Shift_JISにしておきましょう。
この場合、先に示したマニュアルの、「例 3. SJIS ユーザ用の php.iniの 設定」のとおりになっているかをすべて確認して下さい。
再度ご回答有難うございます。
お騒がせしています。
>ところでphpのソースファイルはEUC-JPで保存してますよね?
NO.2様の御礼の欄に書いた時は、()内の状態で保存していました。
それを全てEUC-JPで保存し直して、
metaのcharasetをShift_JISにしましたが、
どうしても文字化けは改善しませんでした。
もう何をやってもダメだ!!とヤケになって、
charasetもEUC-JP、なにもかもEUCで統一したところ
あっさりとキレイに表示されました。
3キャリア(i-mode,au,vodafone)で確認してもばっちりでした。
一緒に考えて下さって本当に有難うございました。
まさか、自分で解決できるなんて思ってませんでした。
ところで、どこをどんなに調べても携帯はShijt-JISが当たり前だと思っていたのですが、EUC-JPで何故通用してしまったのでしょうか。謎だらけです・・・。
No.3
- 回答日時:
>携帯サイトにデータを出力するのにShift-JS
ページ出力全部がShift-JISである必要があります。
SQLから取り出したデータは、スクリプトの記述用文字コード(mbstring.internal_encoding)にまず変換しておけば、
そのあと、mbstring.http_output = SJIS; で、ページ全体がShift-JISに変換されます。
>PCサイトと携帯サイトの両方に
ページ別に出力文字コードを変更する必要があるわけですね。
php.iniでの出力用文字コード設定は、一つしかできませんので、
「ob_start() で ob_start のコールバック関数として mb_output_handler() を指定する」
方法を取る必要があるでしょう。
頑張って、マニュアル読んで下さい。
参考URL:http://php.s3.to/man/ref.mbstring.html
この回答への補足
ご回答有難うございます。
今、マニュアルも読みながら頑張っています。
まだ良くわからない状態ですので、
少し時間がかかると思いますがちょっとでも進めば報告させてください。
すみませんが見捨てないで覗いてやって頂けると嬉しいです。
よろしくお願いします。
すみません、教えてください。
php.iniを開いてみました。
mbstring.internal_encoding = EUC-JP
mbstring.http_output = SJIS
になっています。
output_handler = mb_output_handler
↑このようにしました。
あとは携帯ページの方をすべて
Shift-JISで統一しておいた方が良いのでしょうか。
よろしくお願いします。
No.2
- 回答日時:
確認はPCでされているのでしょうか
文字化けはshift jisがeuc-jpで表示されているのかeuc-jpがshift jisで表示されているのかどっちでしょうか
ブラウザのエンコードを変えて確認してください
それとphpinfo()でmbstringの設定を確認して教えてください
この回答への補足
すみません、mbstringの設定ですが
多分これだと思います
Multibyte Support enabled
Japanese support enabled
Simplified chinese support enabled
Traditional chinese support enabled
Korean support enabled
Russian support enabled
Multibyte (japanese) regex support enabled
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input pass pass
mbstring.http_output pass pass
mbstring.internal_encoding no value no value
mbstring.language Japanese Japanese
mbstring.script_encoding no value no value
mbstring.substitute_character no value no value
補足・御礼の順番がむちゃくちゃなのですが、
このレスが最新です。
現在は
----------------------------------
function cnv_dispstr($string) {
// 文字コードを変換する
$det_enc = mb_detect_encoding($string, "SJIS");
if ($det_enc and $det_enc != ENCDB) {
return mb_convert_encoding($string, $det_enc);
}
else {
return $string;
---------------------------
↑この状態で、ページ全てが文字化けしていたのが
一部(3箇所ほど)文字化けに減りました。
同じ文字のDB出力部分で"円"が円で表示される部分とア゜になる所とあります。同じ 円 なのにどうしてなのでしょうか。
英数字は正常に表示されています。
かな・漢字の一部が化けています。
試しにフォーム内容を送信してみると
DBの文字が化けるようになりました(涙)
送信時の文字もshift-jisになってしまったのですよね、きっと。
ヒントだけでも結構ですので、
アドバイスよろしくお願いします。
再度有難うございますm(_ _)m
確認はPCと携帯3機種で行いました。
色々とeuc-jp、shift-jisと部分的に変えて見たりもしました。
ファイルがたくさんあるので、その設定による文字化けの原因が異なります。ファイルごとの設定と一緒にお知らせします。
---------------------------------------
date.php(euc)
|(PC) |(ktai)
sup.php(euc) sup3.php(euc)
sup.html(euc) sup3.html(shift)
| |
form.php(euc) form3.php(euc)
sin.html(euc) sin3.html(shift)
| |
sincon.html(euc) sincon3.html(shift)
| |
end.html(euc) end3.html(shift)
--------------------------------------------
現在この状態で、DBから呼び出したデータの部分のみ euc-jpがshift-jisで表示されている為文字化けしていると思います。
携帯の方のphpファイルをshift-jisにすると、全体が化けてしますので、eucとshift-jisと混在する形になっています。
先の御礼の欄で書いたソースは、
PCと携帯それぞれのsup.php、form.php 計4ファイルに入っています。
設定の部分は一番上のdate.phpにのみ入っています。
phpinfo()のmbstringの設定確認ですが、すみません、まだphp1ヶ月の初心者なのでよくわかりませんでした。
環境は、ロリポップのレンタルMysqlを使用です。
ブラウザ上でphpinfo()のページを開いてみましたが何も設定されていなさそうな雰囲気でした。
使い方が間違ってるようにも思います(T▽T)
どうぞよろしくお願いします。
No.1
- 回答日時:
文字コードがわかっているなら
$string = mb_convert_encoding($string, "sjis", "euc-jp");
と明示した方が誤判定も防げると思います。
ご回答有難うございます。
$string = mb_convert_encoding($string, "sjis", "euc-jp"); とか
$string = mb_convert_encoding($string, "sjis ,euc-jp"); とか
$string = mb_convert_encoding($string, "euc-jp,sjis"); とか
思いつく限り並べ方を変えたりShift-JIS←→SJISに変えてみたのですが、解決しませんでした。
他の所に原因があるのでしょうか?
PCサイトと携帯サイトの両方に同じDBからデータを取り出したいのですが、PCはEUCで、携帯はSjift-JISで、というようにしたいです。
設定は
-----------------------------
//表示文字コード
define("ENCDISP", "EUC-JP");
//データベース文字コード
define("ENCDB", "EUC-JP");
-----------------------------
↑になってます。
もしよろしければ、再度ご回答頂けると有難いです。
あつかましいお願いですがよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Perl perlについての質問 2 2022/10/17 15:25
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
$str=preg_replace('/\\u3000/'...
-
XML出力時の日本語一部文字化け
-
文字化け
-
mb_convert_encoding で?になる。
-
いいかげんxamppなんとかしたい...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
<大至急!>ご教授願います。
-
メレンゲの歴史
-
PHPのif文でその処理を途中で抜...
-
VBSの「MsgBox」について
-
こちらはただの直列処理ですか?
-
トランザクションが原因?DBに...
-
リンク先を隠す方法はないでし...
-
FTPコマンドでディレクトリごと...
-
CFileDialogの最初のディレクト...
-
PHPでネットワークドライブのop...
-
smartyでホームページ上の画像...
-
コマンドプロンプト エラー
-
図に示す階層構造で,現在のデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エンコーディングについて
-
phpのhex2binについてphpで、ut...
-
ハシゴの「高」が「?」に置き...
-
PHPでCSV出力時の文字化け(一部)
-
$str=preg_replace('/\\u3000/'...
-
PHPの文字化けした文字だけ削除...
-
phpMyAdminで文字化け
-
【PHP】ファイル読み込みで...
-
MySQL文字コード
-
windowsXP、XAMPPでメーラーMer...
-
i18n_convert と mb_convert_e...
-
データベースから取り出した日...
-
scandir関数取得結果の文字化け
-
PHPフォーム→PHP確認画面で...
-
文字化け
-
XML出力時の日本語一部文字化け
-
header("location~")をPOSTで...
-
PHPの文字コード (php.iniの...
-
PHPExcelで日本語(漢字)ファ...
-
mysql utf8、php・euc-jp で出...
おすすめ情報