携帯サイトの文字コードについて - PHPプロ!Q&A掲示板

2823

  • 0P

携帯サイトの文字コードについて

質問日時 / 2010年7月26日 13:47    回答数 / 4件

Questioner:  jun0223xp  このエントリーをはてなブックマークに追加 

キーワード / 携帯サイト    文字コード   

携帯サイトの文字コードについて質問します。
phpのコードはEUC-JPで保存して、サイト自体の文字コードはShift-JISで作成したいと考えております。
その場合、以下のようなコードを考えたのですが、通常どのようにするのがベストでしょうか?

  1. <?php
  2. header(Content-Typetext/htmlcharset=Shift_JIS);
  3. ob_start();
  4. echo '<?xml version="1.0" encoding="Shift_JIS"?>' . "\r\n";
  5. ?>
  6. <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml">
  8. <head>
  9. <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" />
  10. <title>テスト</title>
  11. </head>
  12. <body>
  13. <!-- 省略 -->
  14.   <p>こんにちは</p>
  15. </body>
  16. </html>
  17. <?php
  18. $output = ob_get_contents();
  19. ob_end_clean();
  20. echo mb_convert_encoding( $output'SJIS''EUC-JP' );
  21. ?>

.htaccessの設定も関係ありそうなところを記載しますので、ここはこのような設定にした方が良い、等ありましたらアドバイスお願いします。

  1. php_flag    output_buffering                off
  2. php_value   default_charset                 Shift_JIS
  3. php_value   mbstring.language               Japanese
  4. php_flag    mbstring.encoding_translation   off
  5. php_value   mbstring.http_input             pass
  6. php_value   mbstring.http_output            pass
  7. php_value   mbstring.internal_encoding      EUC-JP
  8. php_value   mbstring.substitute_character   none
  9. php_value   mbstring.detect_order           SJIS,EUC-JP,JIS,UTF-8,ASCII

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimixphpスクリプトがEUC-JPなら、生のHTMLを返さずに全部m
 ┗A01-1jun0223xp早速のご回答ありがとうございます。 mb_convert_enc
  ┗A01-1-1shimixSJISで問題になる文字はおおよそ覚えてますね。なので
   ┗A01-1-1-1jun0223xpなるほど、外部テンプレートですか。 参考になります

回答一覧

並び替え:

A01 満足
answerershimix [7月26日 13:59]

phpスクリプトがEUC-JPなら、生のHTMLを返さずに全部mb_convert_encodingで(その都度)変換して返しますねぇ。出力バッファとか使わないので相当に面倒ですけど「素直に変換できない文字」が出てきたときに対応しないといけないんで。

#でも(携帯専用なら)phpスクリプト自体をSJISにしてしまうことの方が多いかもしれない・・

この意見に回答する

ツリーへ TOPへ

A01-1
replyerjun0223xp [7月26日 14:27] (最終編集:7月26日 14:34)

早速のご回答ありがとうございます。
mb_convert_encodingで変換ということは、すべての出力に対して変換ということですよね?
htmlのソースから何から変換するとなると大変ではないですか?

phpスクリプト自体をSJISにしてしまう方法は私も考えました。
しかしその場合だと以下のようなコード、5cで終わる文字列を変数に入れて出力する場合エラーになってしまいます(magic_quotes_gpcはoffです)。
どのように対処していますか?

  1. <?php
  2. $str = '';
  3. //header(‘Content-Type: text/html; charset=Shift_JIS’);
  4. //ob_start();
  5. echo '<?xml version="1.0" encoding="Shift_JIS"?>' . "\r\n";
  6. ?>
  7. <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
  8. <html xmlns="http://www.w3.org/1999/xhtml">
  9. <head>
  10. <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" />
  11. <title>テスト</title>
  12. </head>
  13. <body>
  14. <!-- 省略 -->
  15.   <p>こんにちは</p>
  16.   <p><?php echo $str?></p>
  17. </body>
  18. </html>
  19. <?php
  20. //$output = ob_get_contents();
  21. //ob_end_clean();
  22. //echo mb_convert_encoding( $output, 'SJIS', 'EUC-JP' );
  23. ?>

よろしくお願いします。

この意見に回答する

ツリーへ TOPへ

A01-1-1 満足
replyershimix [7月26日 14:44]

SJISで問題になる文字はおおよそ覚えてますね。なのでSJISでリテラルを書くときには

  1. $str = 'ソ\';

と書く・・と思います。

何故「思います」なのかと言えば、そもそも外部テンプレートファイルとかになっていることがほとんどで生でリテラルを書く機会がそれほどないので。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyerjun0223xp [7月27日 10:34]

なるほど、外部テンプレートですか。
参考になります。

ありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)