MySQL+PHPサイトでSJISからEUCに変換したい

このQ&Aのポイント
  • MySQL+PHPサイトでSJISからEUCに変換する方法について検討しています。
  • PHPファイルとphp.iniをEUCに変換し、MySQLの文字コードを指定して実験を行いました。
  • 既存のデータも問題なく表示されましたが、設定ファイルやテーブル数が多いため不安です。
回答を見る
  • ベストアンサー

MySQL+PHPサイトでSJISからEUCに変換したい

いつもお世話になっております。 現在PHP4.3.9+MySQL4.1.2でSJISコードで運営をしておりますが、サイトの文字コードをEUCに変更しようかと検討しております。それで、現在いろいろとEUCコードでMySQLから引っ張ってきたデータの表示及びMySQLへのデータ登録の実験をしております。 まずは、PHPファイルをEUCに変換し、php.ini内のSJISだった箇所を下記のようにEUC-JPに変換しました。 mbstring.internal_encoding = EUC-JP mbstring.http_output = EUC-JP そして、PHPファイル内でMySQLへ接続後文字コードを指定している箇所を $sql="SET NAMES ujis"; mysql_query($sql); と変更しました。 実際のPHPファイルとphp.iniに関する部分のみEUCコードに変更し、sjisで設定しているMySQLの設定ファイルとテーブル内は何も変更していない状態です。この状態でフォームに入力した内容をMySQLのテーブルに追加し、追加した情報をPHPで表示する実験をしましたが特に文字化け等の問題は無く動作しました。また既にMySQLに登録してあるデータをEUCの環境で表示させましたが、問題なく表示されました。 前置きが長くなりましたが、MySQLの設定を特に変更しなくても今回私が行なった方法でSJISからEUCへの変換をしてしまって問題は無いでしょうか?PHPのファイル数やMySQLのテーブル数が多いので、いきなり実験通りに動くか不安があるので、質問させていただきました。 PHPやMySQLの文字コードの初歩的なことが分かっていないもので、変な質問になってしまいましたが、アドバイスいただければ幸いです。

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

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

  • ベストアンサー
  • wish46
  • ベストアンサー率78% (29/37)
回答No.1

日本語等で文字化けしないのであれば大丈夫じゃないでしょうか。 不安なら 出力の際にmb_convert_encoding を使えばいいと思います。

Crystalize
質問者

お礼

アドバイスありがとうございました。mb_convert_encodingを活用したいと思います。

関連するQ&A

  • PHP+MySQLでSJISからEUCへの文字コード変換方法を教えてください。

    こんにちは。いつもお世話になっております。本来であれば自サーバーで検証してから質問すべきだとは思いますが、現在稼動中のサーバーしかなく、止めることができないので質問させていただきます。 現在、PHP+MySQLでサイトをSJISコードで運営しておりますが、「表」「能」等のSJISの文字化け対策が面倒になってきまして、EUCに変換してしまおうかと検討しております。 現状の日本語に関する設定は下記のようになっております。 ▼MySQL(my.cnf) バージョン:4.1.20 [mysqld] default-character-set=sjis init_connect="SET NAMES sjis" [mysql.server] default-character-set=sjis [mysqldump] default-character-set=sjis [mysql] default-character-set=sjis ▼PHP(php.ini) バージョン:4.3.9 mbstring.internal_encoding = SJIS mbstring.http_input = pass mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto PHP内でMySQLと接続した直後に次のようにSJISを指定しています。 $sql="SET NAMES sjis"; mysql_query($sql); ちなみに、MySQLはMySQLadminで管理しておりますが、テーブルの照合順序は全てsjis_japanese_ciになっています。 上記のような内容ですが、この場合SJISからEUCに変換する場合の手順として、下記の流れでよろしいでしょうか? 1.PHPファイルをEUCコードに変換。 2.php.iniのSJISの部分をEUCに変換。 3.MySQLの設定ファイルのsjisの部分をujisに変換。 4.MySQLのテーブル内のデータを全てエクスポートして、外部エディタでEUCに変換後インポートする。 特に上記4の作業はテーブル数及びデータが膨大なため結構な作業になってしまいそうです。 もしもっと楽な方法があればご教授いただければ幸いです。なお、サーバーはRed Hat Enterprise Linuxです。

    • ベストアンサー
    • PHP
  • phpがsjisファイルを勝手にeuc-jpに

    変更してブラウザに表示してしまうのですが どうしたらこのような変換をやめさせることができるでしょうか? phpinfo()を見てみると  PHP Core ・・・・・・・・・・・・ default_charset EUC-JP(local value) EUC-JP(master value) ・・・・・・・・・・・・  mbstring ・・・・・・・・・・・・ mbstring.http_output EUC-JP(local value) EUC-JP(master value) mbstring.internal_encoding EUC-JP(local value) EUC-JP(master value) ・・・・・・・・・・・・ となっています。 このEUC-JPをsjisに変更したらいいのでしょうか? そうだとするとその方法を教えてください。

    • ベストアンサー
    • PHP
  • iisでsjisとEUC-JPを同時に動かすためのmbstring?

    windows2000pro+iisでsjisとEUC-JPの二つの文字コードで書いた HTMLを同時に動かすためのmbstringの設定をご存知の方 教えてください。今はその都度php.iniを書き換えています。

    • ベストアンサー
    • PHP
  • PHP,MYSQLで検索が出来ません。sjis→ euc→sjis。

    apache 1.3.34 mysql 4.0.26 php 4.4.2 で運用しています。 HTML 入力 sjis → DATA sjis →読み出し sjis で運用していたのですが、文字化けのおかげで データを EUC にしました。 HTML(入力)sjis→EUC→HTML(読み出し)sjis に変更しました。 参考書を頼りに、変換しながらやっているのですが データが漢字(ひらがなも同じかも)の場合に検索が出来ません **他はうまくいっています***入力、表示ともに 入力時 function cnv_dbstr($string) { $string = htmlspecialchars($string); $string = mb_convert_encoding($string, "EUC-JP", "SJIS"); if (!get_magic_quotes_gpc()) { $string = addslashes($string); } return $string; } 出力時 function cnv_dispstr($string) { $string = mb_convert_encoding($string, "SJIS", "EUC-JP"); $string =nl2br($string); return $string; } 今までは下記のsqlで出来ていたのですが、この福岡市を cnv_dbstr(福岡市) にしてみたりしたのですが検索が出来なくて データが出てきません。 $sql = "select * from mem where area = 1 and cate = '福岡市'" ; $rst = mysql_query($sql, $con); どなたか、アドバイス宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • 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
  • 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
  • phpのini_setの使い方

    宜しくお願いします。 携帯サイトをphpで作ってるんですが、特定の条件になると文字化けします。携帯の日本語コードは『shift_jis』だと思うんですが、サーバのpnpinfoをみてみると、 mbstring.detect_order auto auto mbstring.func_overload 0 0 mbstring.http_input auto auto mbstring.http_output SJIS SJIS mbstring.internal_encoding EUC-JP EUC-JP mbstring.substitute_character no value no value となっていて、もしかしたら、 『mbstring.internal_encoding EUC-JP EUC-JP』 が原因かなーなんて漠然と思っています。 サーバのサポートを見てみると、 『mbstring.http_outputをあらかじめSJISに設定しておりますが、標準では、出力には変換ハンドラを経由しないように設定にしておりますので、基本的に日本語は、PHP4を記述したコードおよびPHP4 内での内部扱いコードに設定してあるEUCのまま出力されます。変換ハンドラを経由しないのは、互換性などの事由におきますものです。ユーザが PHP4に、出力時に自動的に出力をシフトJISにしたい場合には、コード内で変換ハンドラを利用するようにコーディングする必要があります。』 となっておりました。php初心者の私には読んでも何がなんだかさっぱりわからず、悩んでおります。 自分なりの解釈として、 『ini_set関数を使ってサーバのphpの設定を変更してあげれば、文字化けは解消する』のでは?と思い、webでini_set関数の使い方を検索してみましたが、行き着く先はphpのサイトになってしまい、見ても使い方自体はよく分かりませんでした。 大変悩んでおります!どなたか助けてください!! 宜しくお願いします。

    • ベストアンサー
    • PHP
  • php.iniを変更したのにUFT-8が文字化け

    こんにちは。教えて下さい。 Movable TypeをUTF-8で運営しようと思いましたが、使用中のサーバーのphpの文字コードがEUC-JPでした。 サーバーに問い合わせたところ、php.iniを編集するだけで文字コード変更できます、とのこと。 そこで、php.iniの mbstring.language = Japanese mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.internal_encoding = EUC-JP mbstring.detect_order = auto mbstring.substitute_character = none; を mbstring.language = neutral mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.internal_encoding = UTF-8 mbstring.detect_order = auto mbstring.substitute_character = none; にしてみました。 当方初心者で、php.iniは初めていじりました。 EUC-JPとあった箇所またはJapaneseとあった箇所を変更したのみです。 また、Movable Typeのmt-config.cgiで 文字コードをEUC-JPからUTF-8に変更。 Movable Typeの文字コード関連の変更はこのファイルのみですのでこれで大丈夫・・・。 そう思ったのですが、Movable Typeが文字化け・・・。 php.iniの設定が間違っているのでしょうか? 助けてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP+MySQL 4.1.20における文字化け

    お世話になります。 現在、学内に実験的に設置されているサーバーを使って、そこに 「phpMyFAQ(Ver.2.0.3)」を入れて動かそうと試みています。 phpMyFAQのインストールは済んだのですが、いざ使ってみようと思って カテゴリ追加等をしようとすると、日本語が文字化けして「???????」と いうような状態になります。 きっと文字コードの設定に問題があり、php.iniやmy.cnf等の設定を変える 必要があるのでしょうが、サーバーは共用利用しているものであり、他の 利用者へ影響が出てしまうため、変更が困難です。 また、私自身がまだphpやMySQLに詳しくないため、どこを改善すればよい のかがわからずに困っております。(.htaccessをつくっていろいろと記述 してみたりしたのですが、文字化けは解消されていません。) もし何かアドバイス等ありましたらご教示いただけませんでしょうか。 よろしくお願いいたします。 MySQLのバージョン:4.1.20 PHPのバージョン :4.3.9 <MySQL> character_set_client ujis character_set_connection ujis character_set_database ujis character_set_results ujis character_set_server ujis character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/ [mbstring] 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 = none;

  • php5,MySQL5で文字化けが起こる

    環境:php5,MySQL5,XP MySQL5は、インストール時にsjisを指定。 php.iniもmbstring.internal_encoding = SJIS ドスプロンプトでSelect文を発行すると漢字で表示されます。 $dbtype = "mysql"; $sv = "localhost"; $dbname = "*****"; $user = "root"; $pass = "*****"; // 文字コード $enc_disp = "EUC-JP"; $enc_db = "EUC-JP"; // データの文字コードを変換する関数 function cnv_enc($string, $to, $from) { // 文字コードを変換する $det_enc = mb_detect_encoding($string, $from . ", " . $to); if ($det_enc and $det_enc != $to) { return mb_convert_encoding($string, $to, $det_enc); } else { return $string; } } // データベースに接続する $dsn = "$dbtype://$user:$pass@$sv/$dbname"; $conn = DB::connect($dsn); $sql = "SELECT * FROM A"; $res = $conn->query($sql); →この後、SQLの内容をIEで表示させると ”2 Web?? 002 ??????????????”の様に テーブルの中の漢字の部分だけが??????で表示されます。 ヒント、参考になるサイトなど、教えていただけると幸いです。

    • ベストアンサー
    • PHP