アプリ版:「スタンプのみでお礼する」機能のリリースについて

既出の問題だと思うのですが、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');
とか試してみましたが、全ての文字が化けてしまう状態です。

対処方法がありましたらよろしくお願い申し上げます。

A 回答 (5件)

ああ、任意の文字で試すことは出来ない状況でしたか。


しかし問題ありません。ハイフン(あるいはダッシュ?)「―」は0x5CかMS932かどちらの問題かわかりませんでしたが、全角マイナス(Unicode的には全角ハイフンマイナス)「-」なら確実にCP932の問題です。
参考: http://www.m-bsys.com/character-code/java-sjis
phpやSQLには詳しくないので具体的な対処法は分かりませんが、(正式な)Shift_JISとCP932が入り混じって使われているのでしょう。
    • good
    • 1
この回答へのお礼

コメント有難うございました。
お礼が遅れて失礼しました。
使っている文字が-(ハイフン)だと思っていても、実際はマイナス文字であるがために変換できないということですね。
確かに、キーボードで0の右にある-の文字を入れて全角変換するとマイナスの文字コードが入ります。
仕方ないので、この文字が入ってしまった場合、半角のハイフンに置き換えることにしました。同じやり方で旧漢字は新漢字に置き換えましたが、根本的な解決ではないことは判っていますが、当面この方法で切り抜けることにしました。

お礼日時:2016/04/25 13:34

> 全角ハイフンが最も使われている文字というだけで


そうでしたか。
> 髙とか崎の旧字体
それは問題ありません(全角ハイフンが化けるのとは別の問題です。)

私が気になっているのは「ソ」「噂」「£」「~」が化けるか否かです。
「ソ」と「噂」が化けるなら問題は0x5C、「£」と「~」が化けるなら問題はCP932で、対処が全く変わってくるので重要なのです。
そして全角ハイフンとはShift_JISで815Cの文字のことですか?
さらに言えば、UnicodeでU+2015ですか? U+2014ですか?
    • good
    • 3
この回答へのお礼

コメント有難うございます。
「ソ」は化けていませんでした。他の文字が使われていないので今のところ判りません。
ただ判ったことは、全角ハイフンと言っていたのは、お恥ずかしながら、全角マイナス(SJIS:817C,Unicode:FF0d)でした。半角のハイフンを入れてF9で全角に変換すると、全角マイナスが出てきてしまうので、これを使って登録していました。登録自体にも問題があるかもしれません。

お礼日時:2016/02/22 11:38

確認ですが、


全角ハイフンとはShift_JISで815Cの文字のことですか?
「ソ」や「噂」も化けますか?
「£」や「~」は化けませんか?
    • good
    • 2
この回答へのお礼

コメント有難うございます。
全角ハイフンが最も使われている文字というだけで、それ以外の特殊漢字も化けています。髙とか崎の旧字体というのでしょか、機種依存文字もこの区画に含まれる文字も化けています。

お礼日時:2016/02/19 09:14

>変えるのは難しいんです。



まぁそれも選択肢の一つでしょうね。だましだまし運用してください。
ただしつこいようですが、sjisでやる限り治る見込はありません。

mysqlを始めるときに一番最初にいわれる一番大事な約束が
「shiftjisだけはやめておけ」です
    • good
    • 0

文字コード「815C」の問題でしょうかねぇ


5C問題については残念ながら根本的には
・sjisでプログラムを書かない
・sjisでDBを設定しない
の2点しかないと思います。
    • good
    • 0
この回答へのお礼

有難うございました。
sjis自体の問題でそれを直すのが本来のやり方だとは判っていますが、やっとのことで動いているシステムなので変えるのは難しいんです。

お礼日時:2016/02/15 13:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!