Alex
Alex

Reputation: 68396

PHP: remove `http://` from link title

I have a string that looks like:

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

How can I remove the http:// part from the link text, but leave it in the href attribute?

Upvotes: 8

Views: 7590

Answers (7)

Muhammad Tahir
Muhammad Tahir

Reputation: 2491

$str = 'http://www.google.com';
$str = preg_replace('#^https?://#', '', $str);
echo $str; // www.google.com

that will work for both http:// and https://

running live code

Upvotes: 4

Neil Knight
Neil Knight

Reputation: 48537

$string = '<a href="http://google.com">http://google.com</a>'; 
$var = str_replace('>http://','>',$string); 

Just tried this in IDEone.com and it has the desired effect.

Upvotes: 9

alex
alex

Reputation: 490143

Without using a full blown parser, this may do the trick for most situations...

$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>"

It uses a negative lookbehind to make sure there is no href=" or href=' preceding it.

See it on IDEone.

It also takes into account people who delimit their attribute values with '.

Upvotes: 11

lonesomeday
lonesomeday

Reputation: 237817

In this simple case, the preg_replace function will probably work. For more stability, try using 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);

Upvotes: 4

Jong Bor Lee
Jong Bor Lee

Reputation: 3855

Assuming that "http://" always appears twice on $string, search the string for "http://" backwards using strripos. If the search succeeds, you'll know the start_index of the "http://" you want to remove (and you know the length of course). Now you can use substr to extract everything that goes before and after the chunk you want remove.

Upvotes: 2

Justin Morgan
Justin Morgan

Reputation: 2435

Any simple regular expression or string replacement code is probably going to fail in the general case. The only "correct" way to do it is to actually parse the chunk as an SGML/XML snippet and remove the http:// from the value.

For any other (reasonably short) string manipulation code, finding a counterexample that breaks it will be pretty easy.

Upvotes: 2

devasia2112
devasia2112

Reputation: 6016

$string = '<a href="http://google.com">http://google.com</a>';
$var = explode('http://',$string);
echo $var[2]; 

Upvotes: 1

Related Questions