tengo una cadena que parece:PHP: eliminar `http: //` del título del enlace
$string = '<a href="http://google.com">http://google.com</a>';
¿Cómo puedo eliminar la parte http://
del texto del enlace, pero se deja en el href ¿atributo?
tengo una cadena que parece:PHP: eliminar `http: //` del título del enlace
$string = '<a href="http://google.com">http://google.com</a>';
¿Cómo puedo eliminar la parte http://
del texto del enlace, pero se deja en el href ¿atributo?
Sin utilizar un analizador completo soplado, esto puede hacer el truco para la mayoría de las situaciones ...
$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>"
Utiliza un negativo de búsqueda hacia atráspara asegurarse de que no hay href="
o href='
precede.
También tiene en cuenta las personas que delimitan sus valores de atributo con '
.
$string = '<a href="http://google.com">http://google.com</a>';
$var = str_replace('>http://','>',$string);
Sólo probamos esto en IDEone.com y tiene el efecto deseado.
$string = '<a href="http://google.com">http://google.com</a>';
$var = explode('http://',$string);
echo $var[2];
Cualquier expresión regular simple o código de reemplazo de cadena probablemente fallará en el caso general. La única forma "correcta" de hacerlo es analizar realmente el fragmento como un fragmento de SGML/XML y eliminar el http://
del valor.
Para cualquier otro código de manipulación de cadenas (razonablemente corto), encontrar un contraejemplo que lo rompa será bastante fácil.
Bueno, la forma incorrecta es aún más apropiada. No hay suficiente potencial de caso límite para garantizar el uso de la solución de exceso (analizador html) aquí. Una expresión regular es suficiente. (La expresión no regex para html es algo anticuada.) – mario
El "meme" de un hombre es la corrección de otro hombre.No sabemos cuán importante es que esto funcione todo el tiempo, o cuán confiable pueda ser la información. Regex probablemente funcione, pero no quiero darle a @Alexandra la impresión de que su problema se resolvió para cada entrada posible. –
Suponiendo que "http: //" siempre aparece dos veces en $ cadena, busque la cadena de "http: //" al revés usando strripos. Si la búsqueda tiene éxito, sabrá el start_index del "http: //" que desea eliminar (y usted sabe la duración del curso). Ahora puede usar substr para extraer todo lo que sucede antes y después del fragmento que desea eliminar.
En este caso simple, la función preg_replace
probablemente funcione. Para mayor estabilidad, trate de usar 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);
Solo como un caso extremo, es posible que desee utilizar expresiones regulares para asegurarse de que se descuelgue solo desde el principio, ¿qué tal un enlace como 'http://example.com/send-to-friend?url=http:// somewhere.com'? Además, +1 para usar un analizador. – alex
$str = 'http://www.google.com';
$str = preg_replace('#^https?://#', '', $str);
echo $str; // www.google.com
que funcione para ambas http: // y https: //
que podrían encontrar [ 's ($ str) -> replaceLast ('http: //') '] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L305) útil, como se encuentra en [esta versión independiente biblioteca] (https://github.com/delight-im/PHP-Str). – caw