• ベストアンサー

置換えについて

$com =~ s/\\/\/g; ↑のようにすると、能、ソ、申、等の2バイト目が「5C」コードになっている文字も変換されてしまいます。これを防ぐよい方法はないでしょうか? Perlはあまりよくわからないため、意味不明な説明でしたら申し訳ございません。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

がんばればもっと高速なパターンも考えられるかもしれないけど とりあえずこの辺で。 use strict; use warnings; my $str = '\内申一覧表十枚ソ連から\10000で到着'; print $str, "\n"; $str =~ s{([\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]) | ([^\\]) | (\\) }{defined($3) ? '\' : $+}egx; print $str, " 実行結果: \内申一覧表十枚ソ連から\10000で到着 \内申一覧表十枚ソ連から\10000で到着

yuutoOK
質問者

お礼

書かれている内容を理解する事は今の自分のスキルでは到底不可能なので、自力で解決することはやはり不可能でした。 大変助かりました。有難うございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 1バイト文字と2バイト文字の区別の仕方

    C++についての質問です。 簡単な質問で大変申し訳ございません。 '\'や'&'などSQLインジェクションに 関係する文字コードについて 空白に変換する処理をいれていたところ、 カタカナの「ソ」(%83%5c)など も変換されてしまい、 文字化けしてしまうという現象が起きています。 '\'は、'%5c'のため、カタカナの「ソ」は、 それと同じ'5c'のコードが 2バイト目入ってしまっているからだと いう原因までは、 把握しているのですが、 対処の仕方がわかりません。 簡単な質問で申し訳ございませんが ご教示願います。

  • perlで変換時に十申曾箪貼等がもじばけ

    データ管理の為perlで データの保存先のパスを \から/に変換させる事をしたいのですが、パスの途中、ファイル名に 十 申 曾 箪 貼 能 表 等の文字が入ると 文字が化けてしまいます。いろいろ調べて化ける理由は分ったのですが、やりたい事が出来ません。対応できる方法があれば教えてください。 文字コードはSHIFT-JISです 例:c:\申請表\能力検定\貼付け\十分.txt を c:/申請表/能力検定/貼付け/十分.txt に変換したいがどうしても以下の様になってしまう。 c:/・請・・力検定/・付け/・分.txt 

    • ベストアンサー
    • Perl
  • CGIフォームに書いてある @ が消える対策を教えてください。

    CGIフォームに書いてある @ が消える対策を教えてください。 perl、シフトJISのメールフォームCGIをダウンロードして利用しています。 このCGIの設定画面で登録したメールアドレス署名部分の info@example.comの @ 部分の記号が消えちゃいます。 (タグとか使いません。テキストで登録すれば改行も自動反映します。) 送信画面からメールを送った場合は全く文字化けしません。 @にするのが良いのでしょうか? 多くの環境で文字化けさせたくないのですが。 以下の文字化けテストもしてみました。 ------------------------------------ @@―ソ噂十申貼能表暴予禄@@ @@\―\ソ\噂\十\申\貼\能\表\暴\予\禄\@\@\ @@―\ソ\噂\十\申\貼\能\表\暴\予\禄\@@ メール info@example.com メール info@\example.com メール info@example.com ------------------------------- 結果は、以下のようになりました。 ------------------------------- @@<縁嵩舶沫蓮@ @@―ソ噂十申貼能表暴予禄@@ @@―ソ噂十申貼能表暴予禄@@ メール info.com メール info@ xample.com メール info@example.com ------------------------------- 数時間ほど調べたのですが解決できませんでした・・・ 詳しい方ご回答をお願いします。<(_ _)>

    • ベストアンサー
    • CGI
  • perlでの検索機能

    ホームページで使うPerlでの検索機能を作成しています。 メタキャラクタへの対応で検索対象文字には下記コードの置換を行っています。 「+」だけが上手く変換されないのは何故でしょうか。 (変換後を出力すると半角の空白になっています) $val =~ s/([\^\$\+\?\.\*\(\)\[\]\{\}\|\\])/\\$1/g; ※検索対象文字は「EUC」に変換しています。 また、上記コードに追加すべき文字が何かありますか。

    • ベストアンサー
    • Perl
  • FTP SJIS 能など(2バイト目5C)文字 転送エラー

    FTP SJIS 能など(2バイト目5C)文字 転送エラー お世話なります。 FTP転送において、ファイル名に能、表など(2バイト目が5C)を含むファイルをFFFTP、ALFTP等で転送しようとすると、応答コード550の転送エラーとなります。 Shift-JISで能・表などの2バイト文字を扱う場合、2バイト目が5Cだと、5Cが「\」と認識され エスケープ文字になってしまう問題は有名のようですが、 どうすれば等不具合は解消できますでしょうか。 環境はRedhatでシステム文字コードは「/etc/sysconfig/i18n」を確認したところUTF-8です。 別のSoralis環境では文字コード「/etc/default/init」を確認したところで、 SJISですが、問題なく当該文字を転送できます。 ということはFTPサーバプロセスがSJIS文字を、認識するのにUTF-8に変換する過程で読み取れずにエラーということでしょうか? ご教示いただけたら幸いです。 よろしくお願いいたします。

  • 掲示板を作成する際に・・・

    掲示板を作成する際、 文章を等間隔に表示させたいために、 文章を格納している$comに <pre>$com</pre> としてみました。 (大抵のスクリプトでは、「図/表モード」 の場合、<pre>$comment</pre>となっていたからです。) 確かにこれで文字は等間隔に表示されましたがこれだと メッセージ欄で空行(一行空けること)を入れた場合、 空行が無くなり、改行にしかなりません。 改行(とタグ)に対して以下のようにしているのですが・・・・ $com =~ s/\"/&quot;/g; $com =~ s/</&lt;/g; $com =~ s/>/&gt;/g; $com =~ s/<br>//ig; $com =~ s/\r\n/<br>/g; $com =~ s/\r/<br>/g; $com =~ s/\n/<br>/g; $com =~ s/\t/ /g; CGIとPERLはまだかじった程度の知識しかないので どうすればいいのかわからないので教えていただきたいのですが・・・。

    • ベストアンサー
    • CGI
  • 文字コードの迷宮に迷い込みました

    言語がPHP(SJIS)でDBがMySQL(Unicode)の環境で運用しているページがあるのですが、文字コードの変換で謎が謎を呼び始めたので質問します。 (1)フォームからの保存で「ソ」の文字を保存するとDB上で「ソ\」になります。 →コード変換ミス(5c=\)で理解しました。 (2)「ソ\」で保存されたデータをフォームに呼び出すと「ソ\」と表示される。 →UTF8で「5C=\」だから?? (3)上記を回避したくPHPでstripslashesを追加してみると、「ソ」の表示が「メ」になってしまっている。 なぜこうなるのか??回避できないのか?? という点で不思議と謎につつまれているのですが、コメントお願いします。

    • 締切済み
    • PHP
  • コードの書き方の質問

    例えば、普通、コードを書く場合、ド、ミ、ソを譜面に書く場合はCに なりますが、ミ、ソ、ド(これもCコード)のコードを書く場合はC/Eで いいのでしょうか? ソ、ド、ミ(これもCコード)のコードを書く場合はC/Gでいいのでしょうか? もし違っていたら、正しい書き方を教えて下さい。 よろしくお願い致します。

  • UTF-8で書いたperlのパスが正しく読まれない

    元々htmlファイルもcgiファイルもShift-JISで書いていました 英語環境に変えようと、UFT-8にすべくEncordingConverterでファイルを変換しました htmlファイルは文字コード指定も当然UFT-8にし、アップして表示させてみたところ問題なく表示されました しかし、cgiファイルの方が正しく表示されず、perlチェックをしてみたところパスが ・ソ#!/usr/bin/perl となっていました これが原因で正しく表示されなかったようです そこでcgiファイルをテキストエディタで開いてみたのですが、そのエディタ上では #!/usr/bin/perl と本来あるべき正しい表示になっています 文字コードもUTF-8形式になっています どうしれやればきちんと読み取ってもらえるのでしょうか? エディタで開いても「・ソ」の部分が表示されないのでなおしようがなく困っています どなたか解決方法お分かりの方ぜひご教授ください よろしくお願いします

    • ベストアンサー
    • CGI
  • AppleScriptで文字コードをEUC→S-JISへ変換するには?

    AppleScriptで文字コードをEUC→S-JISへ変換する方法をご存知の方いらっしゃいませんか? Perlを利用する方法もあるようですが、当方Perlには詳しくないため、困っております。 漢字コードのサポートはOSレベルでやってほしいものですが…。 助けてください!