• 締切済み

ereg_replaceについて

ereg_replaceで文字を入れ換えしようとしております。 その際、 <A HREF="http://www.xxx.co.jp/xxx/xxx.cfm?pd=13850" target="_blank">xxx</A> という文字列の頭のタグ開始部分を取ろうと思ってるのですが、URLに?が入ってるものが入れ換えができません。 解決方法など、お分かりになる方おられましたら、ご教授のほうよろしくお願いします。

みんなの回答

  • you111111
  • ベストアンサー率45% (20/44)
回答No.2

PHPはよくわからないのですが、取得したURL内の?をエスケープする(\?にする)のでしたら以下のようなものはどうでしょう?・・・JavaScriptですが。 //strTarget(URL等の文字列)を全走査し"?"があったら"\?"にReplaceする function ReplaceAll(strTarget) { var i; var strBuff = ""; for (i = 0; i < strTarget.length; i++) { strBuff += (strTarget.charAt(i) == "?") ? "\\?": strTarget.charAt(i); } return strBuff; }

全文を見る
すると、全ての回答が全文表示されます。
  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

半角の?がメタ文字なためでしょう。 半角の?の前に半角の¥(またはバックスラッシュ)を入れてエスケープしてあげれば動きませんか?

kagetora_uesugi
質問者

補足

この場合、URLをデータベースから引っ張ってきてるので、エスケープする関数などありましたら、教えていただければ助かります。

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

関連するQ&A

  • PHP5.3以降のereg_replaceについて

    PHP5.3以降にアップデートしたところ、ereg_replaceで書かれている箇所で警告が出るようになりました。 マニュアルを見た限りではpreg_replaceへの移行が推奨されているようなので、preg_replaceに書き換えようと思い、http://melma.com/backnumber_129036_1571788/を参考に、2つ目のパラメータの前後に/を付けましたが、画面に何も表示されず、どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 なお、ソースは下記となります。 また、記述はhttp://okwave.jp/qa/q849820.html?&status=true&errcode=&msg=&qid=849820を使用させていただいており、やりたいことはURLに自動的にハイパーリンクを付加したいという状況で、ereg_replaceを使用すればできております。 <?php $proto = "私のブログはhttp://www.hoge.com/です。"; $proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$proto); //$proto = preg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","/<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>/",$proto); print $proto; ?> 以上、宜しくお願いします。

    • ベストアンサー
    • PHP
  • phpでpreg_replaceで次のような条件の文字を置換したいのですが…

    <a href="jump?url= *1 " target="_blank"> *2 </a> というAタグになっている文字列を *2 だけのテキストにしたいと思っています。 preg_replaceでの正規表現での条件がわかりません…。

    • ベストアンサー
    • PHP
  • ereg_replaceの文字化けについて

    宜しくお願いします。 PHPで文字列の置き換えをする関数の『ereg_replace』についてですが、この関数を使う変数に『'』がはいると、置き換え後にその『'』の前に『\』が付いちゃうんですが、これを回避する方法は無いでしょうか?ちなみに、文字化けするソースを明記させて頂きます。 $title_edit = ereg_replace("/\x0D\x0A|\x0D|\x0A/","<br>","${title}"); 入力フォームでtextareaで入力された項目が$titleに入るのですが、textarea内でエンター改行した場合に、その改行コードをHTML上の<BR>タグに置き換えるというものなんですが、これを行うと、『'』の前に『\』が入ってしまうのです。原因が良く判らないで困っています。 お願いします!教えて下さい!!

    • ベストアンサー
    • PHP
  • mb_ereg_replaceについて

    マルチバイトでの置き換えについて質問です。現在は以下のように str_replaceで置き換えしており文字化けはないのですがマルチバイト 対応のmb_ereg_replaceで実行したほうがいい事を知りました。 以下現在のソースです。 // 検索文配列 $search = array("{#aaa#}", "{#bbb#}", "{#ccc#}"); // 置き換え文配列 $replace = array("あああ", "いいい", "ううう"); // 置き換え $str = str_replace($search, $replace, $str); 単純にstr_replaceをmb_ereg_replaceにしてみたのですがエラーに なってしまいました。 置き換えしたい文字が複数あるのでできれば検索文字、置き換え文字を 配列として使用したいのですがどうすればいいのでしょうか? ちなみにですが文字コードはutf-8です。

    • ベストアンサー
    • PHP
  • 正規表現 最短一致と末尾

    例: <a href="http://www.google.co.jp/" target="_blank">http://www.google.co.jp/</a>&nbsp;<a href="http://www.google.co.jp/" target="_blank">http://www.google.co.jp/</a>&nbsp;<a href="http://www.google.co.jp/" target="_blank">http://www.google.co.jp/</a> 例のような文字列に文字列の最後のタグだけにヒットさせたい時下記のような検索文では全部にヒットしてしまいました。 どうも?と$を同時に使うと全文にヒットしてしまうようなのですが、うまく最後のAタグだけにヒットさせる方法はありますでしょうか? <a href=".*?</a>$

    • ベストアンサー
    • PHP
  • 正規表現ereg_replaceで、ダブルクオートの中身をカットしたい

    AAA"BBBBBB"CCCCCEF KKK"ABBCBBCKE"DDDDDEFG といった文字列があるのですが、これを AAACCCCCEF KKKDDDDDEFG この様に、"~"の中身をダブルクオートも含め全てカットしたい場合、ereg_replaceを使った方法を教えて下さい。 $str = ereg_replace("\"","",$str); だと当然ダブルクオートの中身までは外れてくれないので…。

    • ベストアンサー
    • PHP
  • preg_replace

    $img_ref = '<a target="_blank" href="http://aaa/aaa/.com/'.$_POST[bbs].'/img/'.$_POST['key'].$imgnum.$tail.'">'; 上記みたいな画像掲示板のスクリプトの画像URLリンク先を示す箇所で、preg_replaceを使って「http://」と「aaa/aaa.com」の間にbbb/bbb/image.cgi?を入れたいと思います。 ↓こんな感じかなーと思いつつあやっぱりできません。 $img_ref = preg_replace("/(https?):\/\/([\w;\/\?:\@&=\+\$,\-\.!~\*'\(\)%#]+)/", "<a href=\"$1://bbb/bbb/image.cgi?$2\" target=\"_blank\">", $img_ref); だれか知ってる方何卒宜しくお願いします。

    • ベストアンサー
    • PHP
  • mysqlの関数でereg_replace

    レコードから、特定のドメインを含むURLを消去する、といった動作をmysqlの関数で実現しようと考えてます。phpで言うところのereg_replace()のような関数がmysqlであるかどうかということです。 以下のように"bbs"というテーブルの"com"というフィールドからURLに値する文字列を消去するSQL分を実行しましたがこれは動作しませんでした。 update bbs set com = replace(com,regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)','') where com regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)'; replace関数の第二引数にregexpを使用することができませんでした。(やり方が間違ってるのでしょうか?) phpのereg_replaceを使用してフィールド"com"に含まれるURLを消去していくというやり方で実現は可能なのですが、動作の軽さやソースのシンプルさを考え、SQL文で実現することを考えてます。 mysqlのヴァージョンは3.23.58です。 よろしくお願いいたします。m(__)m

  • jQuery 「$」を置換対象にしたい場合

    jQuery でURL内の$を削除したいのですが、指定できません。 別の文字列にすると置換できますので、動作はできているようですが、 「$」を置換対象にするには、どのように書いたらいいでしょうか。 今指定している内容は <a class="dollarreplace" href="http://hodehode.com/url文字列途中で$が入ります" target="_blank">リンク文字</a></p> <script> $(document).ready(function() { $("a.dollarreplace").each(function() { var replace = null; var replace = $(this).attr('href').replace(/$/g,''); $(this).attr('href',replace); }); });</script> となっています。 よろしくお願いいたします。

  • 特殊なテキストエディタ

    <A href="901927192719.jpg" target="_blank"> <A href="901920002719.jpg" target="_blank"> このような<A hrefとblank">の間にはさまれた文字を消すことができるテキストエディタはないんでしょうか? 少しわかりにくいですね、もうすこし説明すると。 <A href="*****" target="_blank"> *=ランダムな文字。 <A href="*****" target="_blank"> これを他の文字に置き換えることができるテキストエディタはありませんか? わかりにくくてすいません、よろしくおねがいします。