質問: str_replace("\\n\\r",'', $str) それ以外も試したところ数値やアルファベットは変換できるものの日本語になると変換出来ませんでした。ソースはutfで書いてます。 多分原因ですが、DB内の値が、元々sjisで保存されていたのが、サーバ移動がありutf8に変換されました。 どんな手順で変換されたかはわからないのですが、\n\r以外はutf8で正常に表示はされます。 改行コードだけがsjisの値で保存されてる?のかもしれません。 ちなみにphpmyadminで見るとそのまま¥n¥rと表示されます。 しかしutf8のデータにはなってるのでsjisで表示させても文字化けしますし、 その変数だけsjisにmb_convertしてからstr_replaceしても効きませんでした。 こういった場合どのような方法があるでしょうか?
回答: > 改行コードだけがsjisの値で保存されてる?のかもしれません。 改行文字は Shift_JIS も UTF-8 も同じです。 > 改行コード¥n¥rがそのまま表示されてしまい ブラウザ上(あるいはソース上)に ¥ が見えるとしたら、改行コードではなくなってしまっています。 > r一文字だけの置換も出来ました。 これからも、データ上は改行コードではなくなってしまっている可能性が窺えます。 > サーバ移動がありutf8に変換されました。 この時に意図しない変換が行われたのかもしれません。 Shift_JIS では(日本だけ)円マークとバックスラッシュ同じ扱い(コード 5C )ですが UTF-8 では全く違う文字ですし。 ただし、改行文字を勝手に別なものに置き換えるような事は余程変な事をしないとあり得ないですが。 DBに改行文字ではなく、¥n のように2つの文字( ¥r¥n なら4つの文字)として格納されるという変な変換(エスケープ?)が行われていたら、可能性が無くもない... phpMyAdmin をお使いなら、 全データをエクスポートして(=SQL化して)ダウンロード 円マークとバックスラッシュを区別できるエディタで必要な所を修正 SQLの実行で修正後のファイルを指定して実行 の様な手順でゴッソリ入れ替えてやる事で、対応できそうに思います。 __円マークとバクスラッシュを区別できないエディタでもうまくいくかもしれません... エクスポートする時に、 DROP のオプションを付けておくと、重複データが登録すされることもないです。