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

このQ&Aのポイント
  • BBCodeを使用して特定の文字列をHTMLタグに変換する方法についてご質問されています。
  • また、URLが正しく変換されずに表示されてしまう問題にも取り組んでいます。
  • URLをリンクとして表示させる方法についてアドバイスをいただけると幸いです。
回答を見る
  • ベストアンサー

特定の文字列を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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.1

$str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/<a href=\"$jumpcgi?$1\" target=\"$target\" rel=\"nofollow\">$2<\/a>/ig; を $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/<a href=\"$1\" target=\"$target\" rel=\"nofollow\">$2<\/a>/ig; にする。 デフォルト http://www.kent-web.com/bbs/patio.html 使ったらどうです? いろいろ改善したいところがあるようですが、 こういう無駄な機能はないです。

chopper_
質問者

お礼

ありがとうございます。 これでたぶん最後だったので、助かりました。 デフォルトでは、ありきたりだったので。 無駄ではないと思います。 教えて下さりありがとう御座いました。

関連するQ&A

  • CGIの掲示板で使うBBcodeなどついて

    どうしても使いたいBBcodeがあるんです。 最新のバージョンで、きりしま式 Web Patio LibertyVerをテストで作成途中なんですけれども、 コメントを書く欄で、[list]系のものがまったく使えないのですが、 どうしたら使えるようになるのでしょうか?? あと、リンクにジャンプできないので どうすればよいでしょうか?? ↓が今、作成中のものです。 http://www28.atpages.jp/wrsend1/patio/read.cgi?no=2

    • ベストアンサー
    • CGI
  • 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
  • クッションを踏まない場合

    http://www28.atpages.jp/wrsend1/patio/read.cgi?no=2 ↑リンクのことなんですが、 クッションを踏まない場合の設定はどうすればいいでしょうか??

    • ベストアンサー
    • Perl
  • リンクについて

    http://www28.atpages.jp/wrsend1/patio/read.cgi?no=2 ↑リンクが他サイトと共有できないとかいって ジャンプできないのですが、つなげるようにするには どうすればよいでしょうか??

    • ベストアンサー
    • Perl
  • 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
  • URLに含まれる可能性がある文字列は?

    こんにちは、よろしくお願いいたします。 ※カテゴリーが分からなかったのでこちらに質問させていただきました。 カテ違いならご指摘下さい。 複数行のテキストファイルの内容からURLを抽出するエクセルVBAを作成しようとしています。 (質問の趣旨はエクセルVBAについてではありません) 各行の内容はURLのみの行、URLが他の文字列に挟まれている行、URLは全く含まれていない行 があります。 URLがハイパーリンクされないようにするため、あるいはURLとなされないようにするために ttpやtpで始まるものは無視してよいです。 「ht tp」や「h ttp」としたものはURLとみなします。(スペースを削除するので問題とならない) 問題となっているのは、httpが含まれると判断した行を「http」で区切った右側のどこまでを URLと看做すか、です。 そこでネット検索してみましたが、「URLで使用できない文字列」というのはいくつか見つかり ましが、たとえば、予約語なのでURLに使用できない文字列は使用できないだけであってURLに は含まれる可能性があります。 「URLに含まれる可能性がある文字列」を調べたいのですがネット検索で見つかった物は明確 に示したものが見つからなかった(検索の仕方が悪かった、あるいは明確に示したものがあって も見方が悪くて見落としていた、というのもあるかと思います)ので開発者や詳しい者でなくて も理解できるように書かれたHPがあれば紹介していただきたいです。直接解説していただくの は大いに歓迎します。 いままでネット検索して見たことがあるページです。 見てもいまいち理解できませんでした。 http://datatracker.ietf.org/doc/rfc3986/ http://datatracker.ietf.org/doc/rfc3986/?include_text=1 http://jbpe.tripod.com/rfcj/rfc2396.ej.sjis.txt http://okwave.jp/qa/q247115.html http://www.ipentec.com/document/document.aspx?page=web-url-invalid-char&culture=ja-jp http://www.ipentec.com/document/document.aspx?page=web-url-invalid-char&culture=ja-jp ↑を見た限りでは、URLに含まれる可能性がある文字列は 問題なく使える文字列 A~Z A~z 0~9 使用可能な文字列 - _ . ! * ' ( ) 予約語として定義されている文字 使用できるがディレクトリ名やファイル名には使用できない ; / ? : @ & = + $ , % ところが、 >URLに含めることのできない文字 >以下の文字はURLに含まれない文字です。 \ ' | ` ^ " < > ) ( } { ] [ と書いてあり、 ) ( は「使用可能な文字列」と「URLに含めることのできない文字」 の両方に書かれており混乱しております。 結局のところ、URLに含まれる可能性がある文字列が把握しきれ ておりません。 ご教示よろしくお願いいたします。

  • 携帯からアクセスされた場合、URLの一部を変換したい

    現在、BBSのCGIから生成されるRSS内容を、RSSリーダのCGIを使ってリンク表示にしています。 そのリンクにアクセスした場合、 例 PCでは : http://www,xx.com/cgi/read.cgi?no=1(通常のアクセス)  携帯では : http://www,xx.com/cgi/m_read.cgi?no=1(m_read.cgiに部分変換) という風に、アクセスさせたいのですが、携帯からのアクセスのみURLの一部を変換(read.cgi⇒m_read.cgi)する手段はありませんでしょうか? お詳しい方いらっしゃいましたらお教えいただけると嬉しいです。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • エクセルのセル内の文字列から抽出したい

    A列に <a href="http://URL/" target="_blank">サイト名</a> という文字列が1000個くらい入っています。 B列にURL部分のみ、C列にサイト名のみを取り出したくて、 B1に左から9文字を削って =SUBSTITUTE(A1,LEFT(A1,9),"") とか入れてみるのですが、これだとURL部分以降の " target="_blank">サイト名</a> が残ってしまいます。 C1には何を入れたら前後の文字列が削除できてサイト名だけになるのかもわかりません。 URLはセルごとに文字数が違うので、どの関数を使えば一括で B1にURL、C1にサイト名が表示されるようになるかアドバイスをお願いいたします。

  • EXCEL2007で文字列の右側から特定文字を抽出

    EXCEL2007で1つのセルの文字列の右側から最初の"/"が出現したときまでの文字を抽出する方法を教えてください。 (例)  A 1エクセル/関数/123456/ここがターゲット 2 3 ⇒関数を使用し、上記A1セルの「ここがターゲット」の文字列を抽出したいのです。 神様、どうか教えてください!

  • URLの文字列判定のプログラムについて

    javascriptの質問です URLを取得し、そのURL内に 「aaa」という文字列が含まれていたらAという文字列を返し 「bbb」という文字列が含まれていたらBという文字列を返し どちらにもあてはまらない場合は、Cという文字列を返す というプログラムを作成したいのですが、方法がわかりません どのようにプログラムを書けばよいのでしょうか お手数ですが教えてください よろしくお願いいたします

専門家に質問してみよう