PHP:从链接标题中删除`http://`

时间:2011-02-02 13:38:05

标签: php html string

我有一个看起来像的字符串:

$string = '<a href="http://google.com">http://google.com</a>';

如何从链接文本中删除http://部分,但将其保留在href属性中?

7 个答案:

答案 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='

See it on IDEone

它还考虑了使用'分隔其属性值的人。

答案 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://

running live code

答案 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];