我有一个看起来像的字符串:
$string = '<a href="http://google.com">http://google.com</a>';
如何从链接文本中删除http://
部分,但将其保留在href属性中?
答案 0 :(得分:11)
如果不使用完整的解析器,这可能适用于大多数情况......
$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='
。
它还考虑了使用'
分隔其属性值的人。
答案 1 :(得分:9)
$string = '<a href="http://google.com">http://google.com</a>';
$var = str_replace('>http://','>',$string);
刚刚在IDEone.com中尝试了这一点,它具有预期的效果。
答案 2 :(得分:4)
在这个简单的例子中,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);
答案 3 :(得分:3)
$str = 'http://www.google.com';
$str = preg_replace('#^https?://#', '', $str);
echo $str; // www.google.com
适用于http://和https://
答案 4 :(得分:2)
在一般情况下,任何简单的正则表达式或字符串替换代码都可能会失败。唯一“正确”的方法是将块实际解析为SGML / XML片段,并从值中删除http://
。
对于任何其他(相当短的)字符串操作代码,找到一个破坏它的反例会很容易。
答案 5 :(得分:2)
假设“http://”总是在$ string上出现两次,使用strripos向后搜索字符串“http://”。如果搜索成功,您将知道要删除的“http://”的start_index(并且您知道当然的长度)。现在,您可以使用substr提取要删除的块之前和之后的所有内容。
答案 6 :(得分:1)
$string = '<a href="http://google.com">http://google.com</a>';
$var = explode('http://',$string);
echo $var[2];