• ベストアンサー

sjisの文字化けとその対処方法について

今掲示板を作っています。 sjisでは特定の文字(表・予・申・能など)が文字化けする問題がありますが、簡単に対処できる方法をさがしています。 一番やりたい方法が、str_replace()関数を使って、例えば「表」を「\表」と書き換える関数を作って、何か書き込むときにはテキストデータをその関数にかけてしのぐというものです。しかし、実際に下のようにやってみると、PHPエラーが発生します。 $textdate = str_replace("表","\表",$textdate); ちなみに、この文字が「表」以外の文字化けをおこさない文字ならばこのエラーは発生しません。 文字コードレベル(16進数レベル)で置換しなければならないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Suzi
  • ベストアンサー率38% (130/334)
回答No.1

 str_replaceは、日本語には正しく対応しないと聞き、入れ替えでしたた、mb_ereg_repalce の方が良いかと思います。  未確認ですが、"\表" → "\\表" 、または '\表' と思います。   また、チェックする時だけeuc-jpに変換して、後でshift_jisに戻すというのがあります。 $textdate = mb_convert_encoding( $textdate, 'EUC-JP', 'SJIS' );  $textdateの処理 $textdate = mb_convert_encoding( $textdate, 'SJIS', 'EUC-JP' );  ただ、sjisの文字化けに関しては、最初から全てshift_jisではなくeuc-jpで記すとこれらが解決いたします。  それぞれのファイルのエンコーディングをEUC、htmlのmetaのcharsetをECU-JPに変えるだけで済みますが。

tenketu
質問者

お礼

回答ありがとうございます。 まさかその手があったとは思いもよりませんでした。 さっそくチェック時だけeuc-jpに変換の方法を試してみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • nitorin
  • ベストアンサー率55% (11/20)
回答No.3

大体stripslashes関数で対応しますよ。

参考URL:
http://www.syon.co.jp/syontech/tech003.html
tenketu
質問者

お礼

回答ありがとうございます。 stripslashes関数に関して調べてみて試してみようと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • noocyte
  • ベストアンサー率58% (171/291)
回答No.2

PHP のことは全然知らないので,シフトJISという点についてだけコメントします. >「表」を「\表」と書き換える それをやるなら,「\表」じゃなくて「表\」です. 「表」= 0x95,0x5C(='\') なので, 「\表」= 0x5C('\'),0x95,0x5C('\') 「表\」= 0x95,0x5C('\'),0x5C('\') Shift_JIS (Wikipedia) http://ja.wikipedia.org/wiki/Shift_JIS#2.E3.83.90.E3.82.A4.E3.83.88.E7.9B.AE.E3.81.AB0x5C.E3.82.92.E6.8C.81.E3.81.A4.E6.96.87.E5.AD.97.EF.BC.88.E3.81.84.E3.82.8F.E3.82.86.E3.82.8B.E3.80.8C.E3.83.80.E3.83.A1.E6.96.87.E5.AD.97.E3.80.8D.EF.BC.89.E4.B8.80.E8.A6.A7 → 2バイト目に0x5Cを持つ文字(いわゆる「ダメ文字」)一覧

tenketu
質問者

お礼

回答ありがとうございます。 「表\」が正しいとは知りませんでした。あぶないところでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • str_replace()で文字化け

    str_replaceについておしえてください。(IE6,php4.3.7,sjis環境) str_replace('','',$str) で$strの中に'能'という文字があると'能\'になってしまいました。 そこで str_replace('能\','能',$str); とすると今度はエラーになりました。 どうすれば化けなくなるでしょうか?

    • ベストアンサー
    • PHP
  • str_replaceで文字化け

    お世話になります。 PHPでstr_replaceを使用しましたら、 「ー」や「・」などの文字が、文字化けを してしまいました。 いろいろ調べたのですが、よく分からずに 困っています。 PHPで文字の置換を行いながら、文字化けを しない方法はどのようにしたらよいのでしょうか。 $abc = str_replace(" ", "", $abc); のあとに$abcを出力しましたら、文字化けをして しまいました。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • SJIS→EUCに送っても文字化けしない

    htmlは、SJISで作っています。 PHPは、EUCで作っています。 普通は文字化けをするため、mb_convert_encoding関数を用いますが、 なぜか、この関数を使わなくても、文字化けしません。 友人は、有り得ないと言います。 事実、友人PCではmb_convert_encoding関数で文字化けを直してました。 私も友人に同感で、SJIS→SJISやEUC→EUCなら文字化けしないけど、文字コードが違うのです。違うから、mb_convert_encoding関数を使うと、思っているのですが‥‥ 設定が違うのかと思い、友人の、php.iniなどいくつかのファイルを私のPCに上書きしてもらいましたが、変わりませんでした。 こういうことってあるのでしょうか? 文字化けしないなら、mb_convert_encoding関数を使わなくて良いので、楽だと思いましたが・・・ 何かの不具合なら、いざ完成した時、またmb_convert_encoding関数をいれる手間がありますし、どうしようか迷っています。 本には、「文字化けしない場合もある」という記述は一言も書いてありませんでした。 逆に、「文字化けするからmb_convert_encoding関数を用いる」と大きく書いてあるぐらいです。 何かの設定なのでしょうか? ソフトのバージョンも、同じでした。不思議です。

    • ベストアンサー
    • PHP
  • UTC-8→SJISで文字化け

    こんにちわ!宜しくお願い致します。 現在、オープンソースのアンケートシステム「limesurvey」におきまして、文字化けが起きており困っております。 LimeSurveyバージョン 1.90+ Build 9046 ほとんどのところは、きちんと日本語表示されるのですが、グラフ内(pchart)の文字が文字化けします。 いろいろネットで調べて、imagettftextが原因と分かりました。 「JIS-mapped Japanese Font Support」の設定値がTRUEの場合、GDライブラリは渡された文字列をUTF-8ではなく、Shift_JISとして解釈するということが分かり、mb_convert_encoding関数であらかじめShift_JISに文字コード変換してから、imagettftext関数に渡したところ基本的には、文字化けが解消しました。 以下が、そのコードです。 $Value2 = mb_convert_encoding($Value2,"SJIS ","UTF-8"); しかしながら、「(1)(2)(3)」(←まる1、まる2、まる3)などの機種依存文字がどうしても「?」に変換されてしまいます。 Shift_JISには、「(1)(2)(3)」などの機種依存文字が無いので仕方がないのですが、何とか良い方法が無いでしょうか? ちなみにネットで調べたところ、「SJIS」ではなくて、「SJIS-win」で変換すれば文字化けが起こらないと分かりましたが、今度は、imagettftextでエラーが出てしまいます。 下記のコードはエラーになります。 $Value2 = mb_convert_encoding($Value2,"SJIS-win ","UTF-8"); 「JIS-mapped Japanese Font Support」の設定値がTRUEの場合でも、GDライブラリは渡された文字列をUTF-8として強制的に解釈させる方法など無いのでしょうか?その他何か良い方法があればお教え下さい。 以上、宜しくお願い致します。

    • 締切済み
    • PHP
  • sjisでの文字化け?

    フォームに文章を入力し内容を送信するCGIを組んだのですが、送信内容の確認画面において文字化けが生じました。 よく聞く「表示」などの文字化けとは違う文字で、「欲求不満」「早苗」などで発生しています。 ただ、「欲求」「不満」「早」「苗」では文字化けせず、「求不」「早苗」という単語になって初めて文字化けするようです。 送信内容はsjisに変換して処理しています。 これはどういったことが原因で発生するのでしょうか? 原因と解決法を御教示いただけたらと思います。

    • ベストアンサー
    • Perl
  • メール送信プログラムで特定文字の文字化け

    PHP初心者です。メール送信プログラムを作成しました。 色々調べて、 //表・予・申・能・十・ソなど特殊漢字の後につく\マークを削除 変数 = stripslashes(変数); でエンマークはとれたのですが、また新たな問題が発生してしまいました。 例えば、山本という名前でフォーム入力すると本という文字が文字化けしてしまいました。送信者名は文字化けしていないのにメールの中身の本という文字が文字化けしてしまいました。どなたか助けてください。

    • ベストアンサー
    • PHP
  • MySQL5.1の文字化け

    多くの方が同様の質問をされていたのですが、一致する問題が見つけれなかったので、ご存じの方がおられたら教えて下さいm(_ _)m (環境)  PHP 5.2.8 ZendFramework 1.5.1 から Pdo Mysqlを使用  文字コード:SJIS  Mysql 5.1  文字コード:EUC-JP (質問内容) 携帯の絵文字データをSJISのバイナリでスクリプト中に埋め込むため、スクリプトの文字コードをSJISに統一したところ、文字化けが発生しました。 SET NAMES SJIS のSQLを発行することで表示は正しくできるようなったのですが、新たにレコードを追加しようとすると文字化けが発生します。 例)情報 → 情表 insertを行う前の文字コードをSJIS,SJIS-win,EUCと変えてみましたが、SJISもしくはSJIS-winの場合は上記の例のとおりとなり、EUCにすると完全な文字化けとなりました... おそらく登録時にMYSQLがSJIS→UTF8→EUCに変換される時に正しく変換されていないものと思われるのですが、どなたか対処方法をご存じないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • JavaScriptが文字化けする

    JavaScriptファイルをSJIS、EUC、UTF8を統一したために スクリプト上で var str = "あいうえー"; をUTF16で var str = "\u3042\u3044\u3046\u3048\u30fc"; このように変換をしましたが alert("\u3402");とかですと、文字化けはしないのですが、 innerhtml="\u3402"; のようにやると、文字化けをしてしまいます。 どのようにしたら対処できますでしょうか? もし、対処方法なければ、仕方ないので、コード判別をできるようにと考えています。

  • sjisで書いているPHPとeucのMysqlでの不都合

    カゴヤインターネットルーティングというレンタルサーバーを借りております。 PHPは携帯のサイトのためどうしてもsjisで書かないといけません。 mysqlはeucです。 ソとか能などよくある文字化けをおこすので addslashes()関数をつかって $str='ソフト'; $com = addslashes($str); としてinsertします。 登録・表示は問題ないのですが、どうしても検索ができません。 $com= 'ソフト'; SELECT * FROM item where item_name like '%$com%' とするとどうしても検索できません。 http://sb.xrea.com/archive/index.php/t-4070.html にも同様のことが書かれていましたが、 $str = mb_convert_encoding($str, "EUC-JP", "SJIS"); のように変換してもうまくいきませんでした。 まことにお手数おかけしますが、ご教授お願いします。

    • ベストアンサー
    • PHP
  • puttyの日本語版において、SJISファイルが文字化け

    (概要) puttyの日本語版をインストールしたのですが、SJISモードにしても、SJISのファイルを開いた際に、文字化けが発生してしまいます。 (詳細) (1)puttyの設定 ウィンドウ→変換においてSJISモードを設定 (2)サーバー上において、環境変数をLANG=ja_JP.ujisおよびLANG=ja_JP.SJISに設定 上記の設定(1)、(2)で、SJISファイルを開くと文字化けが発生します。 ちなみに、ウィンドウ→変換においてEUC-JPモードを設定し、環境変数をLANG=ja_JP.eucjpに設定した場合に、EUCのファイルを開いた際には、文字化けせずに表示できます。 原因および対処方法がお分かりになる方がいらっしゃいましたら、ご教示をお願いいたします。