0

テキストエリアの相対URLを絶対URLに置き換えたいのですが。だからこのようなもの:

/somefolder/somefile 

に置き換えられます:

http://www.mysite123.com/somefolder/somefile

私は仕事をするためにこの置換関数を持っています:

$replaceStrs = array('href=/', "href='/", 'href="/');
$datdescription = str_ireplace($replaceStrs, 'href="http://www.' . $domain . "/", $datdescription);
  1. 問題は、値の先頭にが必要である/ため、のようなURLhref=somefolder/somefileは置き換えられないことです。
  2. また、パーツ/の前後にスペースがあれば動作させたいです。=href

ポイント1が最も重要です。これを改善するのを手伝ってもらえますか?

相対URLをこのような絶対URLに置き換えるPHPの例を見てきました。

ただし、要件は、相対URLが見つかっている/ことがわかっていることですが、私の場合、この部分を管理していません(テキストエリア内のすべてのURLを置き換える作業を行っています)。

4

3 に答える 3

0

PHP:

function expand_links($link) {
    return('href="http://example.com/'.trim($link, '\'"/\\').'"');
}
$textarea = preg_replace('/href\s*=\s*(?<href>"[^\\"]*"|\'[^\\\']*\')/e', 'expand_links("$1")', $textarea);

また、二重引用符またはアポストロフィのいずれかで機能するように正規表現を変更しました。

于 2012-05-20T09:46:21.440 に答える
0

PHP関数がすでにこれを実行できるのに、なぜこれが大騒ぎするのでしょうか。

http://php.net/manual/en/function.http-build-url.php

PS:それはPECLでのみ利用できるようです。Hostgator VPS(標準のCentOS 5リポジトリ)とテストWAMP環境をテストしたところ、両方で利用できるようです。

注意:また、HTMLフラグメントをやみくもに置き換えるべきではありませんまず第一に、それは最終的には機能しないかもしれません(エンコーディングの問題)、第二に、それはあなたのコードにセキュリティの問題を追加するかもしれません。

于 2012-05-20T14:39:02.217 に答える
0

Mihai Stancuの回答を拡張しました!


<?php 
function expand_hrefs($link, $url) {
    return('href="http://'.$url.'/'.trim($link, '\'"/\\').'"');
}

function expand_srcs($link, $url) {
    return('src="http://'.$url.'/'.trim($link, '\'"/\\').'"');
}

$html = preg_replace('/href\s*=\s*(?<href>"[^\\"]*"|\'[^\\\']*\')/e', 'expand_hrefs("$1", "'.$url.'")', $html);
$html = preg_replace('/src\s*=\s*(?<src>"[^\\"]*"|\'[^\\\']*\')/e', 'expand_srcs("$1", "'.$url.'")', $html);
?>

これが私の最初の答えです。

Stackoverflow.comは素晴らしいです!

于 2012-12-27T04:31:12.167 に答える