PHP: удалить `http://` из заголовка ссылки - PullRequest
8 голосов
/ 02 февраля 2011

У меня есть строка, похожая на:

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

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

Ответы [ 7 ]

11 голосов
/ 02 февраля 2011

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

$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='.

Посмотреть на IDEone .

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

9 голосов
/ 02 февраля 2011
$string = '<a href="http://google.com">http://google.com</a>'; 
$var = str_replace('>http://','>',$string); 

Только что попробовал это в IDEone.com , и это дает желаемый эффект.

4 голосов
/ 02 июля 2014
$str = 'http://www.google.com';
$str = preg_replace('#^https?://#', '', $str);
echo $str; // www.google.com

, который будет работать как для http: //, так и для https://

с активным кодом

4 голосов
/ 02 февраля 2011

В этом простом случае функция 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);
2 голосов
/ 02 февраля 2011

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

2 голосов
/ 02 февраля 2011

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

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

1 голос
/ 02 февраля 2011
$string = '<a href="http://google.com">http://google.com</a>';
$var = explode('http://',$string);
echo $var[2]; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...