preg_replace带锚文本的href锚点
如何将每个锚文本替换为所有的锚点。我的代码是preg_replace带锚文本的href锚点
$body='<p>The man was <a href="http://www.example.com/video/">dancing like a little boy</a> while all kids were watching ... </p>';
我想要得到的结果是:
<p>The man was dancing like a little boy while all kids were watching ... </p>
我用:
$body= preg_replace('#<a href="https?://(?:.+\.)?ok.co.*?>.*?</a>#i', '$1', $body);
和结果是:
<p>The man was while all kids were watching ... </p>
试试这个
$body='<p>The man was <a href="http://www.example.com/video/">dancing like a little boy</a> while all kids were watching ... </p>';
echo preg_replace('#<a.*?>([^>]*)</a>#i', '$1', $body);
您可以在这里简单地使用strip_tags()和htmlspecialchars()。
用strip_tags - 地带HTML与字符串PHP标签
用htmlspecialchars - 转换特殊字符为HTML实体
第1步:使用用strip_tags()到去除除<p>
标记之外的所有标记。
第2步:因为我们需要与HTML标记一起获得字符串,我们需要使用用htmlspecialchars()。
echo htmlspecialchars(strip_tags($body, '<p>'));
当有已经是一个内置的PHP函数,我认为这是更好和更紧凑的使用而不是使用preg_replace
对不起,我应该提到,我不想要替换href中的子域,它应该完全匹配如果href包含“www.example.com”,而不是替换任何其他域或子域 – khalil
可以使用此代码:
正则表达式:
/< a.*?>|<a.*?>|<\/a>/g
$body='<p>The man was <a href="http://www.example.com/video/">dancing like a little boy</a> while all kids were watching ... </p>';
echo preg_replace('/< a.*?>|<a.*?>|<\/a>/', ' ', $body);
测试,并显示例如匹配字:https://regex101.com/r/mgYjoB/1
应该没有任何空间一个有效的标签名称,因此' * **' – revo
没有正则表达式.....
<?php
$d = new DOMDocument();
$d->loadHTML('<p>The man was <a href="http://www.example.com/video/">dancing like a little boy</a> while all kids were watching ... </p>');
$x = new DOMXPath($d);
foreach($x->query('//a') as $anchor){
$url = $anchor->getAttribute('href');
$domain = parse_url($url,PHP_URL_HOST);
if($domain == 'www.example.com'){
$anchor->parentNode->replaceChild(new DOMText($anchor->textContent),$anchor);
}
}
function get_inner_html($node) {
$innerHTML= '';
$children = $node->childNodes;
foreach ($children as $child) {
$innerHTML .= $child->ownerDocument->saveXML($child);
}
return $innerHTML;
}
echo get_inner_html($x->query('//body')[0]);
为什么在'$ d-> getElementsByTagName('a')'时使用XPath也是一样的。但是,如果你注册一个函数来检查域名,并且如果你只选择在你的查询中有这个域名的链接节点,XPath可能会很有趣:http://php.net/manual/en/domxpath.registerphpfunctions.php –
你可以当然也可以这样使用,我只需要一个快速的非正则表达式示例,其中'XPath'是我的默认指针。尽管如此,您并不严格需要PHP函数:'// a [starts-with(@ href,'http://www.example.com')]'也可以用于OP,具体取决于预计是否会有类似“https:// www.example.com”或“// www.example.com”的替代方案。 – Wrikken
当应省略号......出现?经过一定的否。的文字或字符? –
正文字符串包含许多锚,我想循环它们全部检查'www.example.com',而不是子域,用它的文本替换每个锚。谢谢 – khalil
@khalil请尝试以下通过我回答。这将解决您的问题。 – Manish