- ベストアンサー
テキストエリアに半角「\」または「%」と入力すると文字化けするので良い方法はありませんか?
ついこの間質問した件ですが、うまくいかなくなり、 わかる方ご伝授お願いいたします。 入力テキストエリアに「\」または「%」と入力すると文字化けするので、 何か良い解決策はありませんか? 教えていただいた方法で、「\」と入力した場合、 $tmp = '\'; $tmp =~ s/\\/¥/; #(2)\-->¥ 処理を追加してみたのですが、 5Cコード処理("表\示" や "予\約" のように、バックスラッシュを補完する処理) をしたあとに、この上の\→¥を行うと、表示と予約が文字化けになります。 「\」または「%」を全角にしてしまう方法はありますか? 教えて下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> EUCで保存してあるものをShiftJISとして > 表示させたい場合はどのように表示させれば > いいのでしょうか?もしかして、 > 深く考える必要はないのでしょうか? 深く考える必要はありません。 出力するときにShiftJISに戻すだけです。 Jcode.pmを使ってる場合でソースコード上はEUCの場合、 print jcode("あいうえお","euc")->sjis; または、 $value = "あいうえお"; #EUC $value = jcode($value,"euc")->sjis; #ShiftJISに変換 print $value; #出力はShiftJIS というような感じです。 jcode.plを使ってる場合も同じように出力直前でShiftJISに戻せばOKです。 なお、Perl 5.8.xの場合は、ソース上で指定することで簡単にソース上とは違う文字コードでの出力の指定が可能ですがここでは割愛します。
その他の回答 (4)
- feininger
- ベストアンサー率41% (74/180)
ソースがEUCで、出力をSJISにしたい場合はjcodeなどで変換する必要があります。 ソースがEUCの場合、EUCでの出力を前提とするのが通常かと。 混乱の原因は「どこで\などに注意しなければならないか?」が明確になっていないことだと思います。 ソースをEUCにすると、ここのところをあまり注意しなくても済みますが、 SJISでソースを記述してもちょっとした注意で回避できます。 注意といっても、ダブルクォーテーション/シングルクォーテーションの使い分けと、 正規表現のメタ文字くらいかな。 この2点に注意していれば大丈夫ですよ。 > 「\」または「%」を全角にしてしまう方法はありますか? ちなみに、文字列のコードがSJISの場合、 「\だけを¥に変換」という処理は結構面倒なロジックが必要になります。 無理に変換して文字化けを回避するより、2点に注意して文字化けを回避したほうが楽なんじゃないかなぁ。
お礼
回答有難うございます。 わかりやすい説明をしていただいて、 理解できそうな気がします。 少しずつ理解を深めていこうと思います。 本当に有難うございました。
- estea
- ベストアンサー率44% (39/87)
文字コードの変換は Jcode.pm とか jcode.pl とか nkf とかあれとかこれとか... いろいろある予感 EUCで保存したのをSjisにして出力してもいいし、 HTMLならタグでEUCコードであることを示してやれば そのまま出力しても読めることが多いな。 鯖の設定にもよるが。
お礼
回答有難うございます。 わかりやすい説明をしていただいて、 理解できそうな気がします。 少しずつ理解を深めていこうと思います。 本当に有難うございました。
- Ethersky
- ベストアンサー率71% (168/235)
$tmp = qq|表示\\|; #\|だと|がエスケープされてしまうので\\| $tmp =~ s/\\/¥/g; $tmp =~ s/表示/表\示/g; print $tmp; #表示¥ できればEUC等、ShiftJIS以外の文字コードを使うことをお勧めします。
補足
素早い回答有難うございます。 現在、文字はShiftJISで行っているのですが、 ShiftJISからEUCで変換し、保存すると、 EUCで保存してあるものをShiftJISとして 表示させたい場合はどのように表示させれば いいのでしょうか?もしかして、 深く考える必要はないのでしょうか?
- Ethersky
- ベストアンサー率71% (168/235)
> 5Cコード処理("表\示" や "予\約" のように、バックスラッシュを補完する処理) > をしたあとに、この上の\→¥を行うと、表示と予約が文字化けになります。 ヒント: これで気づきませんか? 「表\示」内の\も全角に変えてしまっているからです。
補足
回答有難うございます。 私も「表\示」内の\も全角に変えてしまっている からだと気づいていました。なので、何かいい方法 は、ないでしょうか?良かったら教えてください。
お礼
回答有難うございます。 わかりやすい説明をしていただいて、 理解できそうな気がします。 少しずつ理解を深めていこうと思います。 本当に有難うございました。