• 締切済み

PHP+MySQLで携帯サイトを開発しています。

PHP+MySQLで携帯サイトを開発しています。 文字コードはSJISが望ましいということなので、 mb_http_output('SJIS'); mb_internal_encoding('EUC-JP'); ob_start('mb_output_handler'); を入れることで出力をSJISにしたのですが、ドコモでCSSを使用するために header("Content-type:application/xhtml+xml;"); を入れたところ、文字化けしてしまいます。 場所を変えたり、charsetを入れたりしても上手く動きません。 アドバイスいただければ助かります。 よろしくお願いいたします。

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

みんなの回答

回答No.1

ヘッダを入れる前までは文字化けはしていなかったって事でしょうか? 凄く自信が無いですが、HTML出力の際に「<?xml version="1.0" encoding="Shift_JIS" ?> 」は入ってますか? ※そのまま入れるとPHPコードに解釈されてしまうので「echo '<?xml version="1.0" encoding="Shift_JIS" ?>';」としなくてはならないところに注意!

kamex_001
質問者

お礼

説明不足で申し訳ありません。 そうなんです。ヘッダーを入れるまでは正常に動いていました。 「<?xml version="1.0" encoding="Shift_JIS" ?>」は入っています。 回答ありがとうございます。

関連するQ&A

  • 携帯サイト制作をしておりまして、XHTML+Shift_JISで出力で

    携帯サイト制作をしておりまして、XHTML+Shift_JISで出力できずかなり悩まされています。なんでも結構ですのでヒントをいただけましたら幸いです。。 【現象1】 文字化けする。DoCoMoとFireFoxでいずれもUTF-8のコードをShift_JISとして表示しようとしている。 (PHPの記述) header("Content-Type: application/xhtml+xml; charset=Shift_JIS"); mb_internal_encoding('UTF-8'); mb_http_output('Shift_JIS') ob_start('mb_output_handler'); (XHTMLの記述) <!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.1) 1.0//EN" "i-xhtml_4ja_10.dtd"> <html xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=shift_jis" /> 【現象2】 PHPでShift_JISで出力できているが、DoCoMoで見るとXHTMLではなくHTMLと解釈されてしまっている。なので<div style="background-color..といったものが無効になっている。 (PHPの記述) mb_internal_encoding('UTF-8'); mb_http_output('Shift_JIS') ob_start('mb_output_handler'); (XHTMLの記述) 現象1と同じ。 【現象3】 DoCoMoとFirefoxいずれも何も出力されなくなる。ソースも表示できない。 (PHPの記述) 現象2と同じ。 (XHTMLの記述) <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.1) 1.0//EN" "i-xhtml_4ja_10.dtd"> <html xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=shift_jis" /> 【開発条件】 PHP=PHP Version 5.1.6 言語=XHTML サーバー=XSERVER 確認キャリア=DoCoMo N904i phpinfoの内容 output_buffering no value no value output_handler no value no value default_charset no value no value mbstring.detect_order auto auto mbstring.encoding_translation Off Off mbstring.func_overload 0 0 mbstring.http_input auto auto mbstring.http_output SJIS SJIS mbstring.internal_encoding EUC-JP EUC-JP mbstring.language Japanese Japanese mbstring.strict_detection Off Off mbstring.substitute_character no value no value ●謎1 header("Content-Type: application/xhtml+xml; charset=Shift_JIS");をつけると なぜShift_JISに変換してくれなくなるのでしょう? ●謎2 <?xml version="1.0" encoding="Shift_JIS"?> をつけると何も出力されなくなるのはなぜでしょう?

    • ベストアンサー
    • 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
  • syntax error, unexpected T_STRING

    携帯の端末別にXHTMLを表示する書籍のサンプルコードを記載しましたが以下のようなエラーが発生しました。 Parse error: syntax error, unexpected T_STRING in /home/oeppu/public_html/xhtml.php on line 14 14行目は以下の部分です。 <?xml version="1.0" encoding="Shift_JIS"?> ソースコードはShift-JISとEUCでそれぞれ試して見ましたが同じ結果でした。 初心者ですので根本的な部分が間違っているのかもしれません。ご指摘宜しくお願い致します。 /* xhtml_test.php */ <?php // 内部文字コードを出力文字コードに変換するライブラリー require_once 'output_encode.php'; // アクセス端末に対応したXHTMLのDOCTYPEを取得するライブラリー require_once 'mobile_xhtml_doctype.php'; // 出力のバッファリングを有効にする ob_start(); ?> <?xml version="1.0" encoding="Shift_JIS"?> <?php echo mobile_xhtml_doctype(); ?> <html> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="expires" content="-1" /> <titel>XHTML TEST</titel> <body> XHTML TEST </body> </html> <?php output_encode(); ?> /* output_encode.php */ <?php function output_encode() { $str = ob_get_contents(); $output = mb_convert_encoding($str, 'SJIS-win', mb_internal_encoding()); ob_end_clean(); header('Content-Type: application/xhtml+xml;'); echo $output; } ?> /* .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
  • Shift_JISのことろをすべてsjisに

    しても大丈夫でしょうか? たとえば以下のように書いて大丈夫でしょうか? 本来どのように書くべきでしょうか? <?xml version="1.0" encoding="sjis"?>のsjisと <meta http-equiv="content-type" content="application/xhtml+xml; charset=sjis"/> のsjisの2箇所です。 <?xml version="1.0" encoding="sjis"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=sjis"/> <meta http-equiv="content-style-type" content="text/css"/> <meta http-equiv="content-script-type" content="text/javascript"/> <title>sjis</title> </head> <body> <p>これは文字化けのテストです</p> </body> </html>

    • ベストアンサー
    • HTML
  • PHP4.3でapplication/x-javascript

    内部コードEUC-JPで、 mb_http_output('SJIS'); ob_start('mb_output_handler'); として、利用していたのですが、 PHP4.3から、header()で、text/***以外を使うと、 mt_http_outputが自動的にpassになってしまいます。 JavaScriptを動的に生成するときに、 自前のバッファ変数にためて、 変換するみたいなことをしないといけないのですが、 もうちょっと、スマートな方法あるでしょうか?

    • ベストアンサー
    • PHP
  • PHPで.htaccessを設定するとエラーになってしまいます。

    PHPの初心者です。 Xというディレクトリにフォーム記入をするphpファイル(仮にa.php)があります。 このa.phpからpostでb.phpに値を送信して表示させています。 このときにどうしても文字化けが起こってしまうのでこのXディレクトリに.htaccessを設定して置いたところ、 Method Not Allowed The requested method POST is not allowed for the URL ~~ というエラーメッセージが出てきてしまいます。 様々なサイトで掲載されている対処法を確認し、 metaタグや、define('Charset', 'EUC-JP'); while (@ob_end_clean()); mb_http_output(Charset); mb_internal_encoding(Charset); ini_set("default_charset", Charset); ob_start('mb_output_handler'); header ("Content-Type: text/html;charset=EUC-JP"); などをPHPファイルに記入していろいろ試してもうまくいかず 結局.htaccessに行き着いたのですがエラーメッセージ…という具合です。 サーバーはレンタルでシーサイドネットの共有です。phpは使用可能です。php.iniはおそらくいじることはできません。 なぜ.htaccessでエラーになるのかわかりません。 お教え頂ければ幸いです。よろしくお願いします。

    • ベストアンサー
    • 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
  • CSVファイルをダウンロードで文字化け

    こんにちは。 CSVファイルのダウンロードで文字化けを起こしていて困っております。 どなたか助けてくださる方がいらっしゃると大変光栄です。 機種:WindowsXP English ファイル:UTF-8 PHPコードは下記の通りです。 いろいろとHeaderを付けてみたり変えてみたりしましたが、どれも結果は同じでした・・。 Header("Accept-Ranges: none"); Header("Content-Transfer-Encoding: binary"); Header("Content-type: application/x-csv; charset=SJIS-win"); Header("Content-Disposition: attachment; filename=1.csv"); $output = '2007/08/29 こんばんわ'; print mb_convert_encoding($output,'SJIS-win','UTF-8'); アウトプットは下記の通りです。ダブルバイト全てが文字化けしてしまいます。 2007/08/29 ‚ア‚ñ‚ホ‚ñ‚í どなたか解決方法をご存知ないでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPの文字コード (php.iniの設定)

    php.iniを以下のように設定した場合について教えてください。 (PHPの参考書に載っていたWindows環境での設定例です) output_buffering = On output_handler = mb_output_handler default_charset = Shift_JIS 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 = auto mbstring.script_encoding = EUC-JP 1. この設定は「PHPの記述されたファイルはEUC-JPで、 ブラウザに表示される時点でShift-JISに変換される」 ということですか? 2. PHPの参考書(PHP5対応)に、 「PHPアプリケーションを構築する場合、文字コードを Shift-JISにすると、PHPのバージョンやphp.iniの設定に よっては文字化けの原因になることがあるので、 Windows環境でもEUC-JPで保存することを強くお勧めする」 というようなことが書かれていました。 素人考えで、すべて同じ文字コード(EUC-JP)のほうが 楽なのではないかと思ったのですが、上記のように 設定するのはどういう理由からでしょうか? 3. CSSファイルやテンプレートファイル(Smarty)の 文字コードは、Shift-JISとEUC-JPのどちらで保存 すればいいのですか? 4. metaタグのcharsetはShift-JISであっていますか?

    • ベストアンサー
    • PHP
  • 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

専門家に質問してみよう