Perl文字間に¥を入れ文字化けを防ぎたい

このQ&Aのポイント
  • Perlの正規表現を使用して、文字間にバックスラッシュを追加する方法について教えてください。
  • タグを消去するソースコードは正常に動作していますが、「$TEXT =~ /\Q${TEXT}\E/;」というバックスラッシュを追加するソースコードがうまく機能していないことがわかりません。
  • 正規表現やエスケープシーケンスを使用して、文字列にバックスラッシュを追加する方法について教えてください。
回答を見る
  • ベストアンサー

Perl 文字間に¥を入れ文字化けを防ぎたい

いつもお世話になっております。 ご教示お願い致します。 まず下記のソースがあり、 my $TEXT = "<font color=green>これは表示テスト結構"; $TEXT =~ /\Q${TEXT}\E/; $TEXT =~ s/<[^>]*>//g; print qq($TEXT\n); タグを消すソース「$TEXT =~ s/<[^>]*>//g;」これは動いています。 しかし、文字間にバックスラッシュをたすソース「$TEXT =~ /\Q${TEXT}\E/;」 が、きいていないのか、間違っているのかがわからないです。 my $TEXT = "<font color=green>これは表\示\テスト結\構\"; このようにすれば単純にできますが、 正規表現?エスケープシーケンス?での実行をしたいです・・・ どうかお力添えをお願い致します!

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8525/19377)
回答No.1

>まず下記のソースがあり ソースの先頭に use encoding "cp932"; の1行を追加しなさい。 これにより「このソースはシフトJISで書かれています」と指示した事になり、自動的に内部でシフトJISをUTF-8にコード変換して処理する。 すると my $TEXT = "<font color=green>これは表示テスト結構"; と書いても、文字化けは起きない。 つまり my $TEXT = "<font color=green>これは表\示\テスト結\構\"; と書く必要もないし、文字間にバックスラッシュを挟む必要もない。 評価点5点(100点満点)

Cells231
質問者

お礼

お早いご回答ありがとうございます! できました!!

関連するQ&A

  • ある書籍で、見つけました、perlのソースについて

    ある書籍で、見つけました、perlのソースについて 疑問がありまして、お尋ねします。 ※下記は、perl/cgiソースの一部です。 ある書籍で見つけたものです。 >require 'cgi-lib.pl'; >&ReadParse(¥%test); 私は、(%test)だと思っているのですが。 ()の中の、先頭に「¥」を付けることに、どのような意味 があるのでしょうか >$test = $test{'test'}; 仮に、$testの値が「"<&>"」だったとしまして、以下 をごらん頂きたいのですが、 >open(ファイルハンドル,$fname) >while(<ファイルハンドル>){ >$test =~ s/¥"/¥&quot¥;/g; 私の認識では、「s/"/&quot;/g;」ではと思うのですが、 「¥」はどのような意味なのでしょうか 以下、3行も同じ疑問です。 >$test =~ s/&/\&testmp\;/g; >$test =~ s/¥</¥&lt¥;/g; >$test =~ s/¥>/¥&gt¥;/g; >print $_; >} 書籍で上記のソースを見たのですが、 HTMLのフォームのテキストボックスに、「"<&>"」と入力し submitボタンで、上記コードを含む、cgiを開きます。 そして、「"<&>"」を受取っても正しく、置換し、 cgiから、HTML($fname)を開くプログラムです。 置換後のHTMLファイルには、「"<&>"」と表示されます。 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • メールの文字化け

    送信者に返信で文字化けしてしまいます。 パソコンの環境は OS:Windows98 メーラー:Microsoft Outlook Express 4.72.3110.5 です。 メールの受信は上手く出来ているのですが、相手に返信するために アイコンバーの"返信"をクリックして送ろうと試みるのですが その時現れる相手からの引用文が文字化けしてしまいます。 こんな感じです。↓ >$B!!@hF|$O!"BgJQD:$$$F$7$^$$$^$7$F!"?=$7Lu$"$j$^$;$s$G$7$?!#(B >$B2H$K5"$C$F$-$F$+$i!"Cf$r8+$F6C$$$F$7$^$$$^$7$?!#K\Ev$K$9$_$^$;$s$G$7$?!# (B >$B!!$=$l$+$i!"%N!<%H%Q%=%3%s$X$N@\B3$G$9$,!"0JA0$+$i$*;}$A$N%Q%=%3%s$O%^%C %-%s(B >$B%H%C%7%e$G!":#2s9XF~$5$l$?$N$O(BWindows$BHG$H$$$&$3$H$G$7$g$&$+(B? > メーラーの設定は、表示→エンコード→日本語(自動選択)になっています。 よろしくご教授願います。

  • Perl ブログ等の記事の編集

    記事の編集について教えてください。 ブログ等の記事を書き込むまではできました。 そこで、書き込んだ後に、記事を編集・修正をしたいと思い ソースを考えているのですが、 わからなくなりました。 お力添えをお願い致します。 #log.txt 1,test1,name1,text1 2,test2,name2,text2 3,test3,name3,text3 4,test4,name4,text4 5,test5,name5,text5 open(FILE, "<$FILE") or die("error :$!"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; #記事表示 for ($i=0;$i<5;$i++){ last if ($i > @DATA); $data = $DATA[$i]; if ($data ne ""){ my ($category,$title,$name,$text) = split(/,/, $data); print qq(<input type="radio" name="no" value="%02d">$category - $title - $name - $text\n), $i; print qq(<input type="submit" name="edit" value="編集">\n); print qq(<input type="submit" name="delete" value="削除">\n); } } そこで、radioボタンを選択し、 submit「編集」をクリックすると radioボタンで選択されている行のデータを取り出し 修正をするということをしたいのですが、どのようにすればいいでしょうか? 今回の求めている結果ですと log.txtの3行目を取り出し 3,test3,name3,text3 ↓ 3,hen3,kou3,henkou3 にして 最終的なlog.txtは 1,test1,name1,text1 2,test2,name2,text2 3,hen3,kou3,henkou3 4,test4,name4,text4 5,test5,name5,text5 というふうにしたいです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Perlの文字列置換について

    とあるソースで $hogehoge =~ s!<文字列>! do{ $hoge =qq(hogehoge);} !egiox; $_ = $hoge; というのを見たのですが $hogehoge =~ s/<文字列>/hogehoeg/egiox;とは何が違うのでしょうか? また修飾子gとoではどちらが評価されるのでしょうか?または二つとも評価されるのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Perlの文字列置換について

    質問です。文字列の置換を行いたいのですが、まずはソースから・・・ use File::Basename; use File::Copy; use File::Find; use File::Path; my @filelist = (); $inputfile='C:\Users\test.txt'; $outputfile='C:\Users\test_new.txt'; open (IN, $inputfile) or die "$!"; open (OUT, ">$outputfile") or die "$!"; while(<IN>) { $str = $_; if ($str =~ /html:text/) { $str =~ s/html:text/s:textfield/g; $str =~ s/property/name/; $str =~ s/styleClass/cssClass/; elsif($str =~ /html:textarea/) { $str =~ s/html:textarea/s:textarea/g; $str =~ s/property/name/; $str =~ s/style/cssStyle/; $str =~ s/styleClass/cssClass/; } print OUT $str; } close (IN); close(OUT); sub wanted{ push(@filelist, $File::Find::dir."/$_") unless ($_ =~ /^\.$/); } Perlプログラムで下記のソースを一括置換します。 <html:text property="xxx" styleClass="yyy"> <html:textarea property="abc" styleClass="def" style="ghi"> 目標は以下のように置換したいです <s:textfield name="xxx" cssClass="yyy"> <s:textarea name="abc" cssClass="def" cssStyle="ghi"> しかし、上記のプログラムを実行すると <s:textfield name="xxx" cssClass="yyy"> <s:textfieldarea name="abc" cssClass="def" style="ghi"> となってしまいます。 どこをどう直せばよいのかわからないので誰か教えてください。 お願い致します!!

    • ベストアンサー
    • Perl
  • 文字化けしてしまう・・・

    (たぶん)アメリカのサイトだとおもうんですが、見たいページか下記のように文字化けしてしまうんです。全くの初心者なのでお知恵を貸してください。 ちなみにわたしのパソコンはLavieNX LW40H/8、WINDOWS98、IE5.5です。 $B$^$J$_$G$9!#(B $BL@F...|$N7o$J$N$G$9$,!"$^$@M...=Dj$,Dj$^$C$F$$$J$/$F!"(B $B$^$@$*JV;v$,$G$-$^$;$s!#(B $B$H$j$"$($:2L$F$7$J$/%-%c%s%;%k$N2DG=@-...$,9b$$!&!&!&(B $B2q?)$J$s$F9T$-$?$/$J$$$h!A(B!!$B$7$c$A$H$J$J$A$c$s$H2q$$$?$$$h!A(B!! $B$^$?!"O"Mm$7$^$9!#(B

  • perl cgi文字化け解消方法と[1~][11~][21~][最新10件]のようなリンクを付ける方法。

    perlにてcgiを勉強しようと初掲示板を作ってみました。 しかし、日本語を入力すると文字化けしてしまいます。 また、入力フォームの下に[1~][11~][21~][最新10件]のようなリンクを付けたいです。 以上2点のやり方を教えて下さい。お願いします。 #!/usr/bin/perl -w use strict; use warnings; use Encode; use utf8; use CGI; print "location: ./bbs.html\n\n"; print "Content-type: text/html\n\n"; my $q = new CGI; my $name = $q->param('name'); my $body = $q->param('body'); $name =~ s/</&lt;/g; $name =~ s/>/&gt;/g; $body =~ s/</&lt;/g; $body =~ s/>/&gt;/g; $body =~ s/\n/<br \/>/g; my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $year += 1900; $mon += 1; $wday = sprintf("%s", qw(日 月 火 水 木 金 土)[$wday]); my $time = sprintf "$year/%02d/%02d($wday) %02d:%02d:%02d",$mon,$mday,$hour,$min,$sec; open LOG, ">> log.txt"; print LOG "$time<>$name<>$body\n"; open LOG, "< log.txt"; my @log = <LOG>; close LOG; open HTML, "> bbs.html"; print HTML << "END"; <html> <head> <style> body{background:#f0f0f0;} span.name{color:blue;} p.body{margin-left:32px;} </style> <script type="text/javascript"> <!-- function check(form){ function id(id){return(document.getElementById(id));} if(form.name.value == "" || form.body.value == ""){ id('err').innerHTML = "入力に誤りがあります<br />"; id('err').style.color = "red"; return false; }else{ return true; } } //--> </script> <title>簡易掲示板</title> </head> <body> <form action="bbs.cgi" method="post" onsubmit="return check(this)"> <fieldset> <legend>入力フォーム</legend> <span id="err"></span> <label>名前</label><br /> <input type="text" name="name" /><br /> <label>本文</label><br /> <textarea name="body"></textarea><br /> <input type="submit" value="書き込み" /> </fieldset> </form> <hr /> END close HTML; open HTML, ">> bbs.html"; my $num = 0; for(@log){ $num++; chomp($_); my @write = split /<>/, "$_"; print HTML "<p>$num:<span class='name'>$write[1]</span> $write[0]</p>\n<p class='body'>$write[2]</p>\n"; } print HTML << "END"; <hr /> <a href="dammy">TOP</a> </body> </html> END close HTML; exit; よろしくお願いします。

    • ベストアンサー
    • Perl
  • 文字化け対策

    sjisで保存されたファイルを読み込んで、別ファイルに書込みを行ったところ、能等の文字が文字化けを起こしました。 open(IN,"$file"); my $data = <IN>; close(IN); $data=~s/\\//g; open(OUT,">$file2"); print OUT $data; close(OUT); 莫大なソース量だったので、原因を探すのに時間がかかりましたが、一つ一つ消去しながら探したところ、 $data=~s/\\//g; これを消すことで解消しました。 文字化けさせずに\を消すにはどのように書けばいいのでしょうか?

    • ベストアンサー
    • Perl
  • Outlook メール文文字化けについて

    Outlook 2013 で受信メールが文字化けと成りました、この場合どの様に対処すれば良いか? 教えて下さい。 $B$`$+$7$ND9IM$H$OBgJQJQ$o$C$?$3$H$G$7$g$&$M!# (B $B;0I)<y;i$O!"D9IM<y;i$H$$$&1v%S$N2C9)@=:n2q<R$G$9!# (B $B%Q%$%W$J$I$b@=B$$7!"@Q?e2=3XIJ!)$N6%AhAj<j$G$9!# (B $B1H;3$OM-L>$G$9$M!# (B $B 上記の状態です。

  • PerlからPHPへ移行 Part2

    以下、Perlのソースですが、これをコメントどおりに PHPに直すとどうなりますか? Time::Localは ppm install Time-Localでインストールできます。 use strict; BEGIN{ # BEGINはPHPで $|=1; # バッファリングしない } use Time::Local; #PHPでUseは? sub test_date_time{ my ($year, $mon, $mday, $hours, $min, $sec) = @_; # 可変引数な方法 my $serial = timelocal($sec, $min, $hours, $mday, $mon - 1, $year); my $moji = sprintf("$year年$mon月$mday日 $hours時$min分$sec秒"); return ($serial, $moji); # 複数の戻り値で様々な型で返す方法 } my ($serial, $moji) = test_date_time(2006, 10, 2, 10, 25, 30); # 一度に受け取る方法 print q{シリアルは} . $serial . "\n"; #q print qq{文字列は$moji\n}; my $ptn = qr{^(.+?)年(.+?)月(.+?)日\s(.+?)時(.+?)分(.+?)秒$}; if($moji =~ /$ptn/i){ print "$1/$2/$3 $4:$5:$6\n"; } exit(0); # 結果 #シリアルは1159752330 #文字列は2006年10月2日 10時25分30秒 #2006/10/2 10:25:30

    • ベストアンサー
    • PHP