PHP: remove `http: //` do título do link

Eu tenho uma string que parece:

$string = 'http://google.com';

Como posso remover a parte http:// do texto do link, mas deixá-lo no atributo href?

Sem usar um analisador completo, isso pode fazer o truque para a maioria das situações …

 $str = 'http://google.com'; $regex = '/(?< !href=["\'])http:\/\//'; $str = preg_replace($regex, '', $str); var_dump($str); // string(42) "google.com" 

Ele usa um lookbehind negativo para se certificar de que não há href=" ou href=' precede.

Veja em IDEone .

Também leva em consideração pessoas que delimitam seus valores de atributo com ' .

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

Apenas tentei isso no IDEone.com e tem o efeito desejado.

Neste caso simples, a function preg_replace provavelmente funcionará. Para mais estabilidade, tente usar DOMDocument :

 $string = 'http://google.com'; $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 

Isso funcionará tanto para http: // e https: //

executando o código ao vivo

Qualquer expressão regular simples ou código de substituição de string provavelmente falhará no caso geral. A única maneira “correta” de fazê-lo é realmente analisar o pedaço como um snippet SGML / XML e remover o http:// do valor.

Para qualquer outro (razoavelmente curto) código de manipulação de cordas, encontrar um contra-exemplo que o quebra será bastante fácil.

Supondo que “http: //” sempre aparece duas vezes em $ string, procure a string para “http: //” para trás usando strripos. Se a pesquisa for bem-sucedida, você saberá o start_index do “http: //” que você deseja remover (e você sabe o período de curso). Agora, você pode usar substr para extrair tudo o que acontece antes e depois do pedaço que deseja remover.

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