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