PHP - Convierta espacio en% 20 solo en enlaces de texto

Tengo un texto que contiene hipervínculos, algunos hipervínculos contienen espacios y quiero convertirlos a% 20.

Por ejemplo:

To make hyperlinks Page 1

Si convierto el texto anterior usando la función rawurlencode, regresa

To% 20make% 20hyperlinks% 20% 3Ca% 20href% 3D% 22http% 3A% 2F% 2Fwww.link-to-my-page.com% 2Fpage% 201.html% 22% 3EPage% 201% 3C% 2Fa % 3E

Escribí después de RE para convertir el espacio en% 20 solo en enlaces, pero no estoy seguro de cómo aplicar espacio (s) * con preg_replace.

/(http|https|ftp|ftps)(\:\/\/[a-zA-Z0-9\-\.]+)(\s)*\.[a-zA-Z]{2,4}(\/\S*)?/

Cualquier ayuda sería muy apreciada.

Gracias

0
@Andrew Esto dará como resultado lo mismo que mencioné en mi pregunta.
agregado el autor Maximus, fuente
Si solo quiere convertir espacios a% 20, puede usar $ transformed = str_replace ('', '% 20', $ input); ¿Es esto lo que está buscando?
agregado el autor Andrew, fuente

2 Respuestas

Lo más fácil es usar DOMDocument y deja que esto se solucione por ti :

$html = 'To make hyperlinks Page 1';
$doc = new DOMDocument();
$doc->loadHTML( $html);

// Save the fixed HTML
$innerHTML = '';
foreach( $doc->getElementsByTagName('p')->item(0)->childNodes as $child) {
    $innerHTML .= $doc->saveHTML($child);
}

echo $innerHTML;

Salida, gracias a esta pregunta SO: :

To make hyperlinks Page 1
0
agregado
Gracias, Nickb, fue útil.
agregado el autor Maximus, fuente
No, no lo es, mira el ejemplo que he vinculado así como la otra pregunta de SO. Tiene que ser p porque loadHTML() inserta un contenedor HTML alrededor del HTML incompleto. Todo el ciclo está ahí para deshacerse de ese exceso de HTML.
agregado el autor nickb, fuente
No me permite editar tu publicación. Pero creo que tienes razón. Este debería ser realmente el getElementsByTagName ('a') no p.
agregado el autor hsanders, fuente

The right answer here isn't a regexp. It's urlencode() http://php.net/manual/en/function.urlencode.php

0
agregado
Eso agrega un + en el texto. Creo que @jason solo quiere urlencode los enlaces dentro de un bloque de texto.
agregado el autor sachleen, fuente
Luego, querría detectar las URL usando una expresión regular, luego alimentar todas las coincidencias a urlencode ().
agregado el autor hsanders, fuente
Releí esta pregunta, y creo que debería usar DOMDocument como sugiere @nickb. Pensé que estaba hablando de hacer eco de las URL en una etiqueta "a" en lugar de analizar un documento HTML y solucionarlo. Aunque, todavía no está claro, pero me estoy inclinando por lo último.
agregado el autor hsanders, fuente
PHP - Comunidad española
PHP - Comunidad española
9 de los participantes

Enlace para invitaciones: https://t.me/joinchat/B2gdShUFvCner-RgqRF43A En este grupo hablamos de PHP. Partner: es.switch-case.com