我有一个字符串,它看起来像这样:
$string = '<a href="http://google.com">http://google.com</a>';
我该如何从链接文本中删除
我该如何从链接文本中删除
http://
部分,但在href属性中保留它?如果不使用完整的解析器,这个方法对大多数情况可能是可行的...
$str = '<a href="http://google.com">http://google.com</a>';
$regex = '/(?<!href=["\'])http:\/\//';
$str = preg_replace($regex, '', $str);
var_dump($str); // string(42) "<a href="http://google.com">google.com</a>"
它使用负向后顾断言来确保其前面没有href="
或href='
。
在IDEone上查看。
它还考虑到将属性值用'
分隔的人。$string = '<a href="http://google.com">http://google.com</a>';
$var = str_replace('>http://','>',$string);
我在IDEone.com上尝试了一下,它产生了期望的效果。
> http://...
,但如果您事先修剪空格,那么这应该可以做到。 - Robert<a>
标签之间加上空格,例如 <a href='...'> Text </a>
。 - Robert在这种简单情况下,preg_replace
函数可能会起作用。为了更加稳定,请尝试使用 DOMDocument
:
$string = '<a href="http://google.com">http://google.com</a>';
$dom = new DOMDocument;
$dom->loadXML($string);
$link = $dom->firstChild;
$link->nodeValue = str_replace('http://', '', $link->nodeValue);
$string = $dom->saveXML($link);
http://example.com/send-to-friend?url=http://somewhere.com
这样的链接怎么办?此外,使用解析器加1。 - alex$str = 'http://www.google.com';
$str = preg_replace('#^https?://#', '', $str);
echo $str; // www.google.com
可以同时支持 http:// 和 https:// 的解决方案
任何简单的正则表达式或字符串替换代码在一般情况下都可能失败。唯一“正确”的方法是将该块解析为 SGML/XML 片段并从值中删除 http://
。
对于任何其他(相当短的)字符串操作代码,找到打破它的反例将非常容易。
$string = '<a href="http://google.com">http://google.com</a>';
$var = explode('http://',$string);
echo $var[2];
s($str)->replaceLast('http://')
很有帮助,这是在这个独立库中找到的。 - caw