BBCode削除&改行をサニタイジングBBCode

このQ&Aのポイント
  • BBCode削除と改行をサニタイジングする方法
  • エラーが出た場合の原因と解決策
  • BBCode削除と改行のサニタイジングに関する説明
回答を見る
  • ベストアンサー

BBCode削除&改行をサニタイジングBBCode

read.cgi #------------------------------------------------- # BBCode(特定の文字列をHTMLタグに変換) #------------------------------------------------- sub bbcodecnv { my $str = shift; $str =~ s/\[b\](.*?)\[\/b\]/<b>$1<\/b>/ig; $str =~ s/\[i\](.*?)\[\/i\]/<i>$1<\/i>/ig; $str =~ s/\[u\](.*?)\[\/u\]/<span style=\"text-decoration:underline\">$1<\/span>/ig; $str =~ s/\[s\](.*?)\[\/s\]/<span style=\"text-decoration:line-through\">$1<\/span>/ig; $str =~ s/\[code\](.*?)\[\/code\]/<code>$1<\/code>/ig; $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/<a href=\"$1\" target=\"$target\" rel=\"nofollow\">$2<\/a>/ig; $str =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/<span style=\"color:$1\">$2<\/span>/ig; $str =~ s/\[list=1\](.*?)\[\/list\]/<ol style="list-style-type: decimal">$1<\/ol>/g; $str =~ s/\[list=A\](.*?)\[\/list\]/<ol style="list-style-type: upper-alpha">$1<\/ol>/g; $str =~ s/\[list=a\](.*?)\[\/list\]/<ol style="list-style-type: lower-alpha">$1<\/ol>/g; $str =~ s/\[list=I\](.*?)\[\/list\]/<ol style="list-style-type: upper-roman">$1<\/ol>/g; $str =~ s/\[list=i\](.*?)\[\/list\]/<ol style="list-style-type: lower-roman">$1<\/ol>/g; $str =~ s/\[list\](.*?)\[\/list\]/<ul style="list-style-type: disc">$1<\/ul>/ig; $str =~ s/\[\*\]/<li>/ig; return $str; } #------------------------------------------------- # BBCode削除 #------------------------------------------------- sub bbcodedel { my $str = shift; $str =~ s/\[b\](.*?)\[\/b\]/$1/ig; $str =~ s/\[i\](.*?)\[\/i\]/$1/ig; $str =~ s/\[u\](.*?)\[\/u\]/$1/ig; $str =~ s/\[s\](.*?)\[\/s\]/$1/ig; $str =~ s/\[code\](.*?)\[\/code\]/$1/ig; $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/$1/ig; $str =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/$2/ig; $str =~ s/\[list=1\](.*?)\[\/list\]/$1/g; $str =~ s/\[list=A\](.*?)\[\/list\]/$1/g; $str =~ s/\[list=a\](.*?)\[\/list\]/$1/g; $str =~ s/\[list=I\](.*?)\[\/list\]/$1/g; $str =~ s/\[list=i\](.*?)\[\/list\]/$1/g; $str =~ s/\[list\](.*?)\[\/list\]/$1/ig; $str =~ s/\[\*\]/ig; return $str; } patio.cgi # 改行をサニタイジング・BBCode削除 $com =~ s/<br>/&lt;br \/&gt;/g; $com =~ s/\[b\](.*?)\[\/b\]/$1/ig; $com =~ s/\[i\](.*?)\[\/i\]/$1/ig; $com =~ s/\[u\](.*?)\[\/u\]/$1/ig; $com =~ s/\[s\](.*?)\[\/s\]/$1/ig; $com =~ s/\[code\](.*?)\[\/code\]/$1/ig; $com =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/$1/ig; $com =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/$2/ig; $com =~ s/\[list=1\](.*?)\[\/list\]/$1/g; $com =~ s/\[list=A\](.*?)\[\/list\]/$1/g; $com =~ s/\[list=a\](.*?)\[\/list\]/$1/g; $com =~ s/\[list=I\](.*?)\[\/list\]/$1/g; $com =~ s/\[list=i\](.*?)\[\/list\]/$1/g; $com =~ s/\[list\](.*?)\[\/list\]/$1/ig; $com =~ s/\[\*\]/ig; エラーが出てしまいます。 どこがどう間違っていますか?? ※BBCode削除と 改行をサニタイジング・BBCode削除がたぶん ミスっていると思います。

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

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

  • ベストアンサー
回答No.1

コマンドプロンプトで。 >perl -c read.cgi >perl -c patio.cgi とやると、何行目がエラーになってるか表示されます。 スラッシュが1個抜けてるようですが、適宜やりたいようにどうぞ。

chopper_
質問者

お礼

スラッシュが1個抜けてるっていうのが、 $com =~ s/\[\*\]//ig; たぶんこれだったんだと思います。 2コ続けてるのが間違いなんじゃないかと勘違いしていました。 ありがとうございました!

関連するQ&A

  • read.cgi等のタグの追加について

    #------------------------------------------------- # BBCode(特定の文字列をHTMLタグに変換) #------------------------------------------------- sub bbcodecnv { my $str = shift; $str =~ s/\[b\](.*?)\[\/b\]/<b>$1<\/b>/ig; $str =~ s/\[i\](.*?)\[\/i\]/<i>$1<\/i>/ig; $str =~ s/\[u\](.*?)\[\/u\]/<span style=\"text-decoration:underline\">$1<\/span>/ig; $str =~ s/\[s\](.*?)\[\/s\]/<span style=\"text-decoration:line-through\">$1<\/span>/ig; $str =~ s/\[code\](.*?)\[\/code\]/<code>$1<\/code>/ig; $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/<a href=\"$jumpcgi?$1\" target=\"$target\" rel=\"nofollow\">$2<\/a>/ig; $str =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/<span style=\"color:$1\">$2<\/span>/ig; return $str; } #------------------------------------------------- # BBCode削除 #------------------------------------------------- sub bbcodedel { my $str = shift; $str =~ s/\[b\](.*?)\[\/b\]/$1/ig; $str =~ s/\[i\](.*?)\[\/i\]/$1/ig; $str =~ s/\[u\](.*?)\[\/u\]/$1/ig; $str =~ s/\[s\](.*?)\[\/s\]/$1/ig; $str =~ s/\[code\](.*?)\[\/code\]/$1/ig; $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/$1/ig; $str =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/$2/ig; return $str; } と初期設定でありますが、 リスト形式のものは、どういう風に書いたら 良いのでしょうか?? いろいろ調べて(試して)みたんですが、 できませんでした。 よろしくお願いします! ちなみに、 $str =からやっぱり始まるんでしょうか?

    • ベストアンサー
    • Perl
  • <li>の横並びで、<span>のところで改行

    <li>をfloatで横並びにした場合、IE7のみ、<span>のところで改行されてしまい、最後の部分だけ以下のようになります。 ddd ( xx x ) IE8やそれ以外のブラウザは<li>のところで改行され、以下のようになります。 aaa ( xxx ) bbb ( xxx ) ccc( xxx ) ddd ( xxx ) どのようにすれば、IE7も<li>のところで改行され他と同じようになりますか。 実際にはaaa,bbb,xxxの文字などはもっと長いものでたまたま画面右端ぎりぎりにdddまで表示され</span>が区切りになって( xxx )の部分がddd下部に縦に3段くらいで表示されます。 IE8や、他のブラウザは、ddd ( xxx ) がセットで画面に収まらないので、<li>でおりかえされており、このようになってほしいのですが。 よろしくお願い致します。 <ul class="list"> <li><a href="a.html"><span style="color: #cccc99">aaa</span> ( xxx )</a></li> <li><a href="b.html"><span style="color: #cccc99">bbb</span> ( xxx )</a></li> <li><a href="c.html"><span style="color: #cccc99">ccc</span> ( xxx )</a></li> <li><a href="d.html"><span style="color: #cccc99">ddd</span> ( xxx )</a></li> </ul><div style="clear: left;"></div> ul.list{ list-style:none; width:100%; margin: 0 0 .8em 0; padding: 0; } ul.list li { float:left; display: inline; margin-right:.7em; }

    • ベストアンサー
    • HTML
  • 文字列より<・・・>を削除する方法

    お世話になります。 s='<div style="・・・">あいうえお</div>'; とか s='<span style="・・・">あいうえお</span>'; などを s='あいうえお'; としたいのですが、 s=s.replace(/\<.+\>/,''); とすると、 s='' となってしまいます。 gオプションを付けて s=s.replace(/\<.+\>/g,''); としても同じです。 どうしたらできるかおわかりの方見えましたら 教えていただけないでしょうか。 よろしくお願いいたします。

  • mb_ereg

    if(mb_ereg('■', $order->products[$i]['attributes'][$j]['value'])) { echo '<span style="color:#ff0000;"><div style="font-size:27px;">【<b>',A配送,'</b>】</div></span>'; } elseif (mb_ereg('659', $order->products[$i]['orders_ahead_id'])) { echo '<span style="color:#ff0000;"><div style="font-size:27px;">【<b>',B配送,'</b>】</div></span>'; } else { echo ''; } 上記の様なA配送とB配送両方に当てはまる条件の場合はC配送と言うのを足したいのですが 書き方が分かりません。

    • 締切済み
    • PHP
  • 正規表現の部分が解読できません

    twitterをHPに読み込んでいるのですが ツイートでリンクを張ったさいに下記のような現象がおきます。 【ツイート内容】 詳細はhttp://ooo.ooo.comを見てください           ↑url部分にリンク 【HPに読み込まれた内容】 詳細はhttp://ooo.ooo.comを見てください           ↑<http://ooo.ooo.comを見てください>の部分にリンクが張られ            飛び先のURLも<http://ooo.ooo.comを見てください>となってしまう。 使用しているjsファイルは以下になります。(blogger.js) function twitterCallback2(twitters) { var statusHTML = []; for (var i=0; i<twitters.length; i++){ var username = twitters[i].user.screen_name; var status = twitters[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) { return '<a href="'+url+'">'+url+'</a>'; }).replace(/\B@([_a-z0-9]+)/ig, function(reply) { return reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>'; }); statusHTML.push('<li><span>'+status+'</span> <a style="font-size:85%" href="http://twitter.com/'+username+'/statuses/'+twitters[i].id_str+'">'+relative_time(twitters[i].created_at)+'</a></li>'); } document.getElementById('twitter_update_list').innerHTML = statusHTML.join(''); } おそらく正規表現の部分が原因なのはわかるのですが どこを同いじったらいいかがわからず困っております。 アドバイスなどいただけましたら幸いです。 よろしくお願いいたします。

  • それぞれにオンマウス動作

    下記のタグで memberのオンマウス動作はできましたが、 live scheduleのオンマウス動作が分かりません。 (live scheduleもmemberとおなじようにそれぞれ独立してフェードインで出現させたいのです。) 色々試しても、オンマウスで同時にフェードインしたり、両方とも動かなくなったりでどうしたらいいか分からなくなりました。 教えてください。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title></title> <style type="text/css"> <!-- p {    font-size: 50px; font-family: "MS PMincho"; text-decoration:none; } --> </style> <SCRIPT LANGUAGE="JavaScript"> <!-- // itv = 50; // cnt = 0; function strFade(str) { c = str.charAt(cnt++); document.all["ID"].style.color = "#"+c+c+c+c+c+c; if(cnt < str.length) setTimeout("strFade('" + str + "')",itv); if(cnt == str.length) cnt = 0; } //--> </SCRIPT> </head> <body> <div> <p style="margin-top: 200px;"> <p><b>   m </b></p> </div> <p style="margin-top: -20px;"> <p><span onmouseover="this.innerText='  live schedule'" onmouseout="this.innerText='    i'">     i </span></p> <p style="margin-top:-130px;"> <font color='#ffffff'> <SPAN id="ID"><span onmouseover="strFade('fedcba9876543210')" onmouseout="strFade('0123456789abcdef')"><p><a>   member</a></p></SPAN><BR><BR></font> </BODY> </HTML>

  • 文字の色を英字で指定する時はセミコロンは必要なので

    <span style="color:#ff0000;"></span> で色を指定する時に、文字コードのお尻にセミコロンを入れますが、 文字の色を英字で指定する時はセミコロンは必要なのでしょうか? これと <span style="color:red"> これは <span style="color:red;"> どちらが正しいですか?

    • ベストアンサー
    • CSS
  • 入力された文字列の中の数字を全てを削除するプログラム(C言語)

    入力された文字列の中の数字を全てを削除するプログラム(C言語) 柴田望洋さんの「明解C言語入門編」という本の演習11-5に当たるこのプログラムの作り方がどうしてもわかりません。 なんとか書いてみましたが、実行してもうまくいきません。 どこが悪いのか自分でもわかりません。 誰か教えてくださいお願いします。 以下が僕が書いたコードです。 #include<stdio.h> void del_digit(char *str){ unsigned i=0; char *a; while(*(str+i)){ if(*(str+i)<0 || *(str+i)>9) *a++=*(str+i); i++; } printf("%s",a); } int main(){ char *str; scanf(" %s",str); del_digit(str); return 0; }

  • 携帯サイトの絵文字について

    http://mobile.s275.com/file/001663.shtml で携帯絵文字をコードで入力しているにもかかわらず、携帯で確認すると カラーが「黒一色」のみで表示されます。 強引に <span class="style1">廬</span> と記述してみたのですが、うまく反映されませんでした。 他に「i絵文字」というツールがあったので使用したのですが、結果同じでした。 どうしたらいいでしょうか?

  • 特定の文字列をHTMLタグに変換・urlについて

    #------------------------------------------------- # BBCode(特定の文字列をHTMLタグに変換) #------------------------------------------------- の中の、文字列なんですけれども $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/<a href=\"$jumpcgi?$1\" target=\"$target\" rel=\"nofollow\">$2<\/a>/ig; urlのものが、変になります。 http://www28.atpages.jp/wrsend1/patio/read.cgi?no=4 ↑みたいになってしまいます。 http://www.gemani.org/titi4/read.cgi?no=1391 ↑のように文字でリンクさせるにはどうしたらいいでしょうか。

    • ベストアンサー
    • Perl