
既出の問題だと思うのですが、WindowsServer(2012)上で動作するphp+mysqlで全角ハイフン文字が「?」に化けてしまう現象で困っています。
全くの素人が試行錯誤の状態で作ったアプリなので、mysql(V5.5)のテーブルはsjis、php(5.4)スクリプト自体もsjisで書いています。また環境変数は下記の通りです。
mysql>show variables like 'chara%'
character_set_client | cp932
character_set_connection | cp932
character_set_database | utf8
character_set_filesystem | binary
character_set_results | cp932
character_set_server | cp932
character_set_system | utf8
テーブルAに入っている値を照会して、選択した結果を上書きするケースもあるため、別のテーブルBに書き込む処理を行っており、テーブルB上には、化けた文字とそれを画面上で修正した文字が混在する困った状態になっています。
まずは、テーブルAを照会する時点で、文字化けをしない状態にし、文字化けをしている状態のテーブルBの値を更新する必要があると思うのですが、まずは前者から対処したいと思います。
対処方法として、化けた文字を$strとすると、
$str=mb_convert_encoding(mb_convert_encoding($str, 'sjis-win', 'auto'), 'UTF-8', 'sjis-win');
とか、
$str=mb_convert_encoding($str, mb_internal_encoding(), 'SJIS-WIN');
とか試してみましたが、全ての文字が化けてしまう状態です。
対処方法がありましたらよろしくお願い申し上げます。
No.5ベストアンサー
- 回答日時:
ああ、任意の文字で試すことは出来ない状況でしたか。
しかし問題ありません。ハイフン(あるいはダッシュ?)「―」は0x5CかMS932かどちらの問題かわかりませんでしたが、全角マイナス(Unicode的には全角ハイフンマイナス)「-」なら確実にCP932の問題です。
参考: http://www.m-bsys.com/character-code/java-sjis
phpやSQLには詳しくないので具体的な対処法は分かりませんが、(正式な)Shift_JISとCP932が入り混じって使われているのでしょう。
コメント有難うございました。
お礼が遅れて失礼しました。
使っている文字が-(ハイフン)だと思っていても、実際はマイナス文字であるがために変換できないということですね。
確かに、キーボードで0の右にある-の文字を入れて全角変換するとマイナスの文字コードが入ります。
仕方ないので、この文字が入ってしまった場合、半角のハイフンに置き換えることにしました。同じやり方で旧漢字は新漢字に置き換えましたが、根本的な解決ではないことは判っていますが、当面この方法で切り抜けることにしました。
No.4
- 回答日時:
> 全角ハイフンが最も使われている文字というだけで
そうでしたか。
> 髙とか崎の旧字体
それは問題ありません(全角ハイフンが化けるのとは別の問題です。)
私が気になっているのは「ソ」「噂」「£」「~」が化けるか否かです。
「ソ」と「噂」が化けるなら問題は0x5C、「£」と「~」が化けるなら問題はCP932で、対処が全く変わってくるので重要なのです。
そして全角ハイフンとはShift_JISで815Cの文字のことですか?
さらに言えば、UnicodeでU+2015ですか? U+2014ですか?
コメント有難うございます。
「ソ」は化けていませんでした。他の文字が使われていないので今のところ判りません。
ただ判ったことは、全角ハイフンと言っていたのは、お恥ずかしながら、全角マイナス(SJIS:817C,Unicode:FF0d)でした。半角のハイフンを入れてF9で全角に変換すると、全角マイナスが出てきてしまうので、これを使って登録していました。登録自体にも問題があるかもしれません。
No.3
- 回答日時:
確認ですが、
全角ハイフンとはShift_JISで815Cの文字のことですか?
「ソ」や「噂」も化けますか?
「£」や「~」は化けませんか?
コメント有難うございます。
全角ハイフンが最も使われている文字というだけで、それ以外の特殊漢字も化けています。髙とか崎の旧字体というのでしょか、機種依存文字もこの区画に含まれる文字も化けています。
No.2
- 回答日時:
>変えるのは難しいんです。
まぁそれも選択肢の一つでしょうね。だましだまし運用してください。
ただしつこいようですが、sjisでやる限り治る見込はありません。
mysqlを始めるときに一番最初にいわれる一番大事な約束が
「shiftjisだけはやめておけ」です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL MYSQL エラー 2 2022/10/18 11:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで連勤チェックをした...
-
like句を使って日本語を検索す...
-
RPMのmysqlとmysql-serverの違い
-
SQL Server のキャラクターセッ...
-
オラクルのDATE型について
-
mysqlがインストールされている...
-
オラクルのデータ型・通貨について
-
ODP.NETのバージョン確認
-
-3.34 が -3.3399999999999999 ...
-
SQLで日本語データを入力したい...
-
MySQLカラム名は日本語と英数字...
-
バージョンの違うMySQLのリモー...
-
LIKE で清音と濁音・半濁音を区...
-
ERROR 1045 (28000) (using pas...
-
プライマリーキーの昇順でソー...
-
VBAで変数内に保持された二次配...
-
mysqlがインストールされている...
-
MySQLの型のサイズ指定で速度は...
-
MYSQLの起動オプション
-
MySQL のコマンドが実行出来ま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで連勤チェックをした...
-
like句を使って日本語を検索す...
-
my.cnf と my.ini の違い
-
emacs の日本語入力2
-
windows上のphpにおける全角ハ...
-
sjisを使いたい!
-
my.iniを書き換えても文字化け...
-
ODBC接続で全角文字が文字化け
-
Mysql移行後の文字化け
-
FedoraCore4+php5.0.4+Mysql4.1...
-
MYSQLへODBC接続すると文字化け...
-
MySQLで日本語が化けてしまいま...
-
phpMyadminでのMySQLの文字セット
-
MySQLレコードの文字化けについて
-
MySQL Connector C++について
-
mySQLデータベースに書き込む...
-
「表」の文字入りのレコードがi...
-
SUBSTRING文が日本語認識しない
-
phpMyAdminのデフォルトのLangu...
-
テーブル名の文字化けについて
おすすめ情報