Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将HREF链接替换为BBCODE URL_Php_Regex_Preg Replace - Fatal编程技术网

PHP将HREF链接替换为BBCODE URL

PHP将HREF链接替换为BBCODE URL,php,regex,preg-replace,Php,Regex,Preg Replace,把我的头发拔出来。我正在解析文本,我需要将任何href链接转换为bbcode URL。例如: <a href="http://www.foo.com" rel="nofollow">http://www.foo.com</a> 我也试过: $str = preg_replace('#(<a href=[\'"])(.*?)([\'"]>)([^\'"].*?)(</a>)#', '[URL=$2]$4[/URL]', $str); $str=p

把我的头发拔出来。我正在解析文本,我需要将任何href链接转换为bbcode URL。例如:

<a href="http://www.foo.com" rel="nofollow">http://www.foo.com</a>
我也试过:

$str = preg_replace('#(<a href=[\'"])(.*?)([\'"]>)([^\'"].*?)(</a>)#', '[URL=$2]$4[/URL]', $str);
$str=preg_replace(“#()#,”[URL=$2]$4[/URL],$str);

什么都不管用。任何帮助都将不胜感激。

对于该正则表达式,再加一个通配符就可以了-您需要在结束符
之间留出额外的字符:

$str = preg_replace('#(<a href=[\'"])(.*?)([\'"].*>)(.*?)(</a>)#', '[URL=$2]$4[/URL]', $str);
$str=preg_replace(“#()#,”[URL=$2]$4[/URL],$str);

根据您的数据,您可能还需要考虑其他可能的组合,例如链接看起来像“代码> <代码>:

$str=preg_replace(“#()#,”[URL=$2]$4[/URL],$str);

DOMDocument示例:

$html = '<div><a href="http://www.foo.com" rel="nofollow">http://www.foo.com</a></div>';
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
$nodeList = $dom->getElementsByTagName("a");
$linkArr = [];
foreach ($nodeList as $link) { $linkArr[] = $link; }
foreach ($linkArr as $link) {
    $text = "[URL=" . $link->getAttribute("href") . "]"
          . $link->nodeValue . "[/URL]";
    $link->parentNode->replaceChild($dom->createTextNode($text), $link);
}
echo $dom->saveHTML();
$html='';
$dom=新的DOMDocument;
$dom->loadHTML($html,LIBXML\u html\u NODEFDTD | LIBXML\u html\u NOIMPLIED);
$nodeList=$dom->getElementsByTagName(“a”);
$linkArr=[];
foreach($nodelistas$link){$linkArr[]=$link;}
foreach($linkArr作为$link){
$text=“[URL=”..$link->getAttribute(“href”)。]
.$link->nodeValue.[/URL];
$link->parentNode->replaceChild($dom->createTextNode($text),$link);
}
echo$dom->saveHTML();

看看这里:@BiGGiE0344这与这个问题完全相反。我尝试了这个问题,但它似乎不起作用。$dom->saveHTML();似乎什么也没有返回。
$str = preg_replace('#(<a href=[\'"])(.*?)([\'"].*>)(.*?)(</a>)#', '[URL=$2]$4[/URL]', $str);
$str = preg_replace('#(<a\s.*href=[\'"])(.*?)([\'"].*>)(.*?)(</a>)#', '[URL=$2]$4[/URL]', $str);
$html = '<div><a href="http://www.foo.com" rel="nofollow">http://www.foo.com</a></div>';
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
$nodeList = $dom->getElementsByTagName("a");
$linkArr = [];
foreach ($nodeList as $link) { $linkArr[] = $link; }
foreach ($linkArr as $link) {
    $text = "[URL=" . $link->getAttribute("href") . "]"
          . $link->nodeValue . "[/URL]";
    $link->parentNode->replaceChild($dom->createTextNode($text), $link);
}
echo $dom->saveHTML();