PHP: удалить ' http: / / ` из названия ссылки

у меня есть строка, которая выглядит так:

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

Как я могу удалить http:// часть из текста ссылки, но оставить ее в атрибуте href?

7 ответов


без использования полномасштабного парсера это может сделать трюк для большинства ситуаций...

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

использует отрицательный lookbehind чтобы убедиться, что нет href=" или href=' предыдущего.

смотрите на IDEone.

Он также учитывает людей, которые разделяют свои значения атрибутов с помощью '.


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

просто попробовал это в IDEone.com и он имеет желаемый эффект.


В этом простом случае 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);

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

что будет работать для HTTP:// и HTTPS://

запуск live code


любое простое регулярное выражение или код замены строки, вероятно, потерпит неудачу в общем случае. Единственный "правильный" способ сделать это-фактически разобрать фрагмент как фрагмент SGML/XML и удалить http:// от стоимости.

для любого другого (достаточно короткого) кода манипуляции строками найти контрпример, который разбивает его, будет довольно легко.


предполагая, что" http:// "всегда появляется дважды в $string, выполните поиск строки" http:// " назад с помощью strripos. Если поиск удастся, вы будете знать start_index " http://", который вы хотите удалить (и вы знаете длину, конечно). Теперь вы можете использовать substr для извлечения всего, что происходит до и после куска, который вы хотите удалить.


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