プロが教えるわが家の防犯対策術!

ついこの間質問した件ですが、うまくいかなくなり、
わかる方ご伝授お願いいたします。

入力テキストエリアに「\」または「%」と入力すると文字化けするので、
何か良い解決策はありませんか?

教えていただいた方法で、「\」と入力した場合、
$tmp = '\';
$tmp =~ s/\\/¥/; #(2)\-->¥
処理を追加してみたのですが、
5Cコード処理("表\示" や "予\約" のように、バックスラッシュを補完する処理)
をしたあとに、この上の\→¥を行うと、表示と予約が文字化けになります。
「\」または「%」を全角にしてしまう方法はありますか?
教えて下さい。

A 回答 (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の場合は、ソース上で指定することで簡単にソース上とは違う文字コードでの出力の指定が可能ですがここでは割愛します。
    • good
    • 0
この回答へのお礼

回答有難うございます。
わかりやすい説明をしていただいて、
理解できそうな気がします。
少しずつ理解を深めていこうと思います。
本当に有難うございました。

お礼日時:2004/09/06 21:24

ソースがEUCで、出力をSJISにしたい場合はjcodeなどで変換する必要があります。


ソースがEUCの場合、EUCでの出力を前提とするのが通常かと。

混乱の原因は「どこで\などに注意しなければならないか?」が明確になっていないことだと思います。
ソースをEUCにすると、ここのところをあまり注意しなくても済みますが、
SJISでソースを記述してもちょっとした注意で回避できます。

注意といっても、ダブルクォーテーション/シングルクォーテーションの使い分けと、
正規表現のメタ文字くらいかな。
この2点に注意していれば大丈夫ですよ。

> 「\」または「%」を全角にしてしまう方法はありますか?
ちなみに、文字列のコードがSJISの場合、
「\だけを¥に変換」という処理は結構面倒なロジックが必要になります。

無理に変換して文字化けを回避するより、2点に注意して文字化けを回避したほうが楽なんじゃないかなぁ。
    • good
    • 0
この回答へのお礼

回答有難うございます。
わかりやすい説明をしていただいて、
理解できそうな気がします。
少しずつ理解を深めていこうと思います。
本当に有難うございました。

お礼日時:2004/09/06 21:26

文字コードの変換は Jcode.pm とか jcode.pl とか nkf とかあれとかこれとか...



いろいろある予感

EUCで保存したのをSjisにして出力してもいいし、
HTMLならタグでEUCコードであることを示してやれば
そのまま出力しても読めることが多いな。
鯖の設定にもよるが。
    • good
    • 0
この回答へのお礼

回答有難うございます。
わかりやすい説明をしていただいて、
理解できそうな気がします。
少しずつ理解を深めていこうと思います。
本当に有難うございました。

お礼日時:2004/09/06 21:27

$tmp = qq|表示\\|; #\|だと|がエスケープされてしまうので\\|


$tmp =~ s/\\/¥/g;
$tmp =~ s/表示/表\示/g;
print $tmp; #表示¥

できればEUC等、ShiftJIS以外の文字コードを使うことをお勧めします。

この回答への補足

素早い回答有難うございます。
現在、文字はShiftJISで行っているのですが、
ShiftJISからEUCで変換し、保存すると、
EUCで保存してあるものをShiftJISとして
表示させたい場合はどのように表示させれば
いいのでしょうか?もしかして、
深く考える必要はないのでしょうか?

補足日時:2004/08/25 21:29
    • good
    • 0

> 5Cコード処理("表\示" や "予\約" のように、バックスラッシュを補完する処理)


> をしたあとに、この上の\→¥を行うと、表示と予約が文字化けになります。

ヒント:

これで気づきませんか?
「表\示」内の\も全角に変えてしまっているからです。

この回答への補足

回答有難うございます。
私も「表\示」内の\も全角に変えてしまっている
からだと気づいていました。なので、何かいい方法
は、ないでしょうか?良かったら教えてください。

補足日時:2004/08/25 20:58
    • good
    • 0

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