<< ラジオボタンのnameの値を受け渡したい 質問一覧 【再質問22:00/AU不具合】ファイルの... >>

  • 0P
特定の日本語表示に対する文字化け

表題の件につきまして、ご質問させて頂きます。

PHPファイルがSJISでコーディングされている為、特定の日本語を使用すると、文字化けが発生してしまします。

■環境
 Linux
  Apache
  PHP4
  Postgres Ver7

諸事情により、PHPのバージョンを上げる事ができず、又、ソースコードの文字コードをUTF-8に変更する事もが難しい為、良い対処方が無いか現在探しております。

情報をお持ちの方がおりましたら、何卒ご教授の程よろしくお願い致します。

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

Q特定の日本語表示に対する文字化け takeHo  [03月11日 01時02分] 
┗Re:特定の日本語表示に対する文字化け shimix  [03月11日 07時58分] 
  ┗Re:Re:特定の日本語表示に対する文字化け takeHo  [03月11日 16時00分] 
    ┗Re:Re:Re:特定の日本語表示に対する文字化け shimix  [03月11日 16時40分] 
      ┗Re:Re:Re:Re:特定の日本語表示に対する文字化け takeHo  [03月11日 18時50分] 
        ┗Re:Re:Re:Re:Re:特定の日本語表示に対する文字化け shimix  [03月11日 19時30分] 
          ┗Re:Re:Re:Re:Re:Re:特定の日本語表示に対する文字化け takeHo  [03月14日 21時57分] 

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:特定の日本語表示に対する文字化け

「特定の日本語」はどういう文字で、どういうケースで発生するんでしょうか?

magic_quotes_gpcがonの環境でフォームからの入力が化けるとかであれば、基本的な話ですし・・

  http://www.shtml.jp/mojibake/sjis_cgi.html#php

リテラルで書いたものが化けるとか、データベースからの表示で化けるとか・・そういう状況を教えてください。

#いずれにしても「特定の日本語」のコード(16進)を調べればわかりそうですけどね。

Re:Re:特定の日本語表示に対する文字化け

情報が不足しておりました。

文字化け対象となる文字は「表」や「能」です。

HTMLタグの生成ライブラリを開発中に、この問題が発生しました。
  1. ※省略
  2.  
  3. class Html {
  4.  
  5.   function span( $data, $option, $flg = false ) {
  6.   
  7.     if ( $flg == true ) {
  8.  
  9.       return sprintf( '<span %s>%s</span>', $this->css( $option ), $data );
  10.     }
  11.  
  12.      // css()はスタイルシートのメゾット
  13.      echo  sprintf( '<span %s>%s</span>', $this->css( $option ), $data );
  14.   }
  15.  
  16. }
  17. $Html = new Html();
  18.  
  19. ?>
  20.  
  21. ※省略
  22.  
  23. <? $Html->span( '新機能'array( 'color' => '#ff0000' ) )?>
  24.  
  25. ※省略

御手数お掛けしますが、何卒宜しくお願い致します。

Re:Re:Re:特定の日本語表示に対する文字化け

>文字化け対象となる文字は「表」や「能」です。

であれば、前のレスで書いたURLのとおり「5c」が含まれているんですよね。sjisだと、print '新機能'; と書いただけでParse Errorになります。

  1. <? $Html->span( '新機能\'array'color' => '#ff0000' ) ); ?>
ではどうですか?


正直「ソースがSJIS限定」というのはキツイですね。入出力はまだしもソースのエンコーディングは何でもかまわないだろうと思うのですが・・。

Re:Re:Re:Re:特定の日本語表示に対する文字化け

shimixさん

有り難うございます。

今回のライブラリ作成に際して、「Parse Error」の対象になる文字に関しては自動的にエスケープを入れる処理を行いたいと思いますが、知識・技術不足の為、その要領に現在悩んでおります。

単純に
  1. <?php
  2.  
  3. $encode_data = urlencode( '新機能' );
  4.  
  5. $decode_data = urlencode( str_replace( '5c''5c%5c'$encode_data ) );
  6.  
  7. echo $decode_data;
  8.  
  9. ?>
では、出来ませんでした。

正規表現で、'5c'を上手く操作する方法でも現在調べております。

度々御手数お掛けして恐縮ですが、良い処理方法等ありましたら、ご教授の程、宜しくお願い致します。

Re:Re:Re:Re:Re:特定の日本語表示に対する文字化け

>自動的にエスケープを入れる処理を行いたいと思いますが、

Parseできないものは、それ以降どうやっても無理です。そもそもリテラルで'新機能'とか'一覧表'と書いた時点で終端の単引用符が認識されないのですから。それが「ソースがマルチバイト非対応」の言語でSJISが推奨されない最大要因です。

#数自体は多くない(前述のサイトの一覧で40個)ので慣れた方だと覚えてしまっていて、
#自動的に「\」を付加してtypeしちゃうみたいですが(汗

リテラルをあちこちに書かなくて済むように、まとめてdefineするなどの工夫をした方がいいと思います。エラーになったり文字化けしてくれればすぐにわかりますが、思わぬところで(引数の順番がずれるとか)バグを生む可能性もありますので。


(蛇足)
もしスクリプトで処理出来たとしても(前述のとおり処理出来ませんが)'5c'はダメですね。書くとすれば0x5cです。

Re:Re:Re:Re:Re:Re:特定の日本語表示に対する文字化け

shimixさん

情報有難うございます。

分かりやすい説明で大変助かりました。

対処法については、現在未だ検討中ですが、今後の運営を考慮してPHPファイルの文字コードの見直しについての重要さが増した次第です。

今まで、何とかSJISでやりくりしていた事を考えると、その為の労力に価値を付けるのが難しいだと個人的にネガティブだと思い込んでしまうところです。

本当に有難う御座いました。
ラジオボタンのnameの値を受け渡したい 質問一覧 【再質問22:00/AU不具合】ファイルの...