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='
предыдущего.
Он также учитывает людей, которые разделяют свои значения атрибутов с помощью '
.
$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://
любое простое регулярное выражение или код замены строки, вероятно, потерпит неудачу в общем случае. Единственный "правильный" способ сделать это-фактически разобрать фрагмент как фрагмент 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];