elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?  (Leído 5,508 veces)
Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
[Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
« en: 30 Junio 2020, 02:27 am »

Tengo una función php que recibe un parámetro que es una cadena cualquiera, lo que va hacer es que toda esa cadena va a detectar urls planas y las va a poner en html... Hasta acá todo va perfecto, el problema está al tratar de pasarla a js... No me llevo muy bien con las expresiones regulares y ese tipo de cosas... estuve viendo otras funciones pero son muy diferentes y terminan teniendo algún error...

Código
  1. function Convert_Content($string)
  2. {
  3.    $result = preg_replace('/((http|https|www)[^\s]+)/', '<a target="_blank" href="$1">$0</a>', $string);
  4.   $result = preg_replace('/href=\"www/', 'href="http://www', $result);
  5.  
  6.   return $result;
  7. }
  8.  


En línea

[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
« Respuesta #1 en: 30 Junio 2020, 06:08 am »

Podes usar la libreria Linkifyque procesa tanto texto plano como html.


En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
« Respuesta #2 en: 1 Julio 2020, 09:23 am »

Muchas gracias! ya había escuchado de linkify pero por lo general no me gusta usar librerías de terceros, no digo que no lo haga pero si puedo evitarlo mucho mejor.
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
« Respuesta #3 en: 1 Julio 2020, 12:05 pm »

Generalmente no tiene nada de malo utilizar librerías de terceros. Te ahorras tiempo, dolores de cabeza, y casos en los que no has pensado. Por ejemplo, enla funcion PHP que muestras, que pasa si le paso un string como este:

<p>http://google.com</p>

Te va a devolver esto:

Código
  1. <p><a target="_blank" href="http://google.com</p>">http://google.com</p></a>

Lo cual obviamente esta rotisimo... E incluso no tenemos que ir tan lejos, basta con que el texto incluya comillas:

Puedes leer más sobre tortugas en "https://es.wikipedia.org/wiki/Testudines"

Código
  1. Puedes leer más sobre tortugas en "<a target="_blank" href="https://es.wikipedia.org/wiki/Testudines"">https://es.wikipedia.org/wiki/Testudines"</a>

Ahí rompes todo el HTML con una simple camilla doble. Ya que usas ReGeX, te puedes asegurar de capturar solo lo que consideraríamos como una URL valida.

https://regexr.com/3e6m0

Eso sacado de StackOverflow con más de 600 votos.. Y aun así, no es válido porque no aceptaría dominios perfectamente válidos como:

https://hello.amsterdam/
https://barça.cat
http://ñoño.com


Porque limita el TLD a un máximo de 6 caracteres y solo espera a-z sin caracteres UTF-8. Tampoco acepta todo mayúsculas...

Código:
((http|https)\:\/\/)?[\w0-9\-\.]{1,255}\.[\w]{2,63}(\/[\w_\.\/\#]*)?

Este más o menos cumple con su cometido... Aunque si no lleva http/https delate, habría que ponerlo y eso implica comprobar antes de hacer el replace. En PHP seria algo así:

Código
  1. function makeLinks(string $string): string
  2. {
  3.    $regex = '/((http|https)\:\/\/)?[\w0-9\-\.]{1,255}\.[\w]{2,63}(\/[\w_\.\/\#]*)?/iu';
  4.    $links = preg_match_all($regex, $string, $output);
  5.  
  6.    foreach ($output[0] as $link) {
  7.        $url = strtolower($link);
  8.  
  9.        // Comprobar si empieza por http/https
  10.        if (strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0) {
  11.            $url = 'http://' . $url;
  12.        }
  13.  
  14.        // Creamos un enlace valido manteniendo el formato original.
  15.        $anchor = sprintf('<a href="%s" target="_blank">%s</a>', $url, $link);
  16.        $string = str_replace($link, $anchor, $string);
  17.    }
  18.  
  19.    return $string;
  20. }


Donde un texto como este:

Puedes leer más sobre tortugas en "https://es.wikipedia.org/wiki/Testudines" y para todo lo demás google.com

Se convierte en esto:

Código
  1. Puedes leer más sobre tortugas en "<a href="https://es.wikipedia.org/wiki/testudines" target="_blank">https://es.wikipedia.org/wiki/Testudines</a>" y para todo lo demás <a href="http://google.com" target="_blank">google.com</a>


Ahora, en javascript hay un problema enorme, hasta ES6 javascript no tenía soporte para unicode en regex. Ende, no podemos utilizar el importantísimo flag /u (unicode) y por lo tanto, no podemos targetear dominios como ñoño.com sin añadir parafernalias como \0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF]) . Hay 3 opciones, o nos saltamos los dominios unicode... no muy recomendable, o solo soportamos navegadores con ES6 (tampoco muy recomendable) o toca transpilar ( https://github.com/mathiasbynens/regexpu )  y con suerte sacar algo funcional…

Yo este paso me lo salto y voy a quitarme unicode de por medio, más que nada para ahorrar tiempo:

Código
  1. function makeLinks(string) {
  2.    var regex = /((http|https)\:\/\/)?[\w0-9\-\.]{1,255}\.[\w]{2,63}(\/[\w_\.\/\#]*)?/ig;
  3.    var output = string.match(regex);
  4.  
  5.    if (!output || output.length < 1) {
  6.        return string;
  7.    }
  8.  
  9.    for (var i = 0, t = output.length; i < t; ++i) {
  10.        var link = output[i];
  11.        var url  = link.toLowerCase();
  12.  
  13.        if (!/^https?:\/\//.test(url)) {
  14.            url = 'http://' + url;
  15.        }
  16.  
  17.        var anchor = '<a href="' + url + '" target="_blank">' + link + '</a>';
  18.        string = string.replace(link, anchor);
  19.    }
  20.  
  21.    return string;
  22. }

Con ES6 quedaría un poco más bonito:

Código
  1. function makeLinks(string) {
  2.    const regex = /((http|https)\:\/\/)?[\w0-9\-\.]{1,255}\.[\w]{2,63}(\/[\w_\.\/\#]*)?/ig;
  3.    const output = string.match(regex);
  4.  
  5.    if (!output || output.length < 1) {
  6.        return string;
  7.    }
  8.  
  9.    output.forEach((link) => {
  10.        let url = link.toLowerCase();
  11.            url = (!/^https?:\/\//.test(url) ? `http://${url}` : url);
  12.  
  13.        string = string.replace(link, `<a href="${url}" target="_blank">${link}</a>`);
  14.    });
  15.  
  16.    return string;
  17. }


Código
  1. console.log(makeLinks('Puedes leer más sobre tortugas en "https://es.wikipedia.org/wiki/Testudines" y para todo lo demás google.com'));


Y todo esto, te lo puedes ahorrar con:

Código
  1. <script src="linkify.min.js"></script>
  2. <script src="linkify-html.min.js"></script>
  3. <script>
  4.    console.log(linkifyHtml('Puedes leer más sobre tortugas en "https://es.wikipedia.org/wiki/Testudines" y para todo lo demás google.com', {
  5.        className: '',
  6.        defaultProtocol: 'http'
  7.    }));
  8. </script>

... pero no quieres usar librerías de terceros xD


Saludos
« Última modificación: 1 Julio 2020, 12:11 pm por #!drvy » En línea

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
« Respuesta #4 en: 1 Julio 2020, 13:51 pm »

Generalmente no tiene nada de malo utilizar librerías de terceros. Te ahorras tiempo, dolores de cabeza, y casos en los que no has pensado. Por ejemplo, enla funcion PHP que muestras, que pasa si le paso un string como este:

<p>http://google.com</p>

Te va a devolver esto:

Código
  1. <p><a target="_blank" href="http://google.com</p>">http://google.com</p></a>

Lo cual obviamente esta rotisimo... E incluso no tenemos que ir tan lejos, basta con que el texto incluya comillas:

Puedes leer más sobre tortugas en "https://es.wikipedia.org/wiki/Testudines"

Código
  1. Puedes leer más sobre tortugas en "<a target="_blank" href="https://es.wikipedia.org/wiki/Testudines"">https://es.wikipedia.org/wiki/Testudines"</a>

Ahí rompes todo el HTML con una simple camilla doble. Ya que usas ReGeX, te puedes asegurar de capturar solo lo que consideraríamos como una URL valida.

https://regexr.com/3e6m0

Eso sacado de StackOverflow con más de 600 votos.. Y aun así, no es válido porque no aceptaría dominios perfectamente válidos como:

https://hello.amsterdam/
https://barça.cat
http://ñoño.com


Porque limita el TLD a un máximo de 6 caracteres y solo espera a-z sin caracteres UTF-8. Tampoco acepta todo mayúsculas...

Código:
((http|https)\:\/\/)?[\w0-9\-\.]{1,255}\.[\w]{2,63}(\/[\w_\.\/\#]*)?

Este más o menos cumple con su cometido... Aunque si no lleva http/https delate, habría que ponerlo y eso implica comprobar antes de hacer el replace. En PHP seria algo así:

Código
  1. function makeLinks(string $string): string
  2. {
  3.    $regex = '/((http|https)\:\/\/)?[\w0-9\-\.]{1,255}\.[\w]{2,63}(\/[\w_\.\/\#]*)?/iu';
  4.    $links = preg_match_all($regex, $string, $output);
  5.  
  6.    foreach ($output[0] as $link) {
  7.        $url = strtolower($link);
  8.  
  9.        // Comprobar si empieza por http/https
  10.        if (strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0) {
  11.            $url = 'http://' . $url;
  12.        }
  13.  
  14.        // Creamos un enlace valido manteniendo el formato original.
  15.        $anchor = sprintf('<a href="%s" target="_blank">%s</a>', $url, $link);
  16.        $string = str_replace($link, $anchor, $string);
  17.    }
  18.  
  19.    return $string;
  20. }


Donde un texto como este:

Puedes leer más sobre tortugas en "https://es.wikipedia.org/wiki/Testudines" y para todo lo demás google.com

Se convierte en esto:

Código
  1. Puedes leer más sobre tortugas en "<a href="https://es.wikipedia.org/wiki/testudines" target="_blank">https://es.wikipedia.org/wiki/Testudines</a>" y para todo lo demás <a href="http://google.com" target="_blank">google.com</a>


Ahora, en javascript hay un problema enorme, hasta ES6 javascript no tenía soporte para unicode en regex. Ende, no podemos utilizar el importantísimo flag /u (unicode) y por lo tanto, no podemos targetear dominios como ñoño.com sin añadir parafernalias como \0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF]) . Hay 3 opciones, o nos saltamos los dominios unicode... no muy recomendable, o solo soportamos navegadores con ES6 (tampoco muy recomendable) o toca transpilar ( https://github.com/mathiasbynens/regexpu )  y con suerte sacar algo funcional…

Yo este paso me lo salto y voy a quitarme unicode de por medio, más que nada para ahorrar tiempo:

Código
  1. function makeLinks(string) {
  2.    var regex = /((http|https)\:\/\/)?[\w0-9\-\.]{1,255}\.[\w]{2,63}(\/[\w_\.\/\#]*)?/ig;
  3.    var output = string.match(regex);
  4.  
  5.    if (!output || output.length < 1) {
  6.        return string;
  7.    }
  8.  
  9.    for (var i = 0, t = output.length; i < t; ++i) {
  10.        var link = output[i];
  11.        var url  = link.toLowerCase();
  12.  
  13.        if (!/^https?:\/\//.test(url)) {
  14.            url = 'http://' + url;
  15.        }
  16.  
  17.        var anchor = '<a href="' + url + '" target="_blank">' + link + '</a>';
  18.        string = string.replace(link, anchor);
  19.    }
  20.  
  21.    return string;
  22. }

Con ES6 quedaría un poco más bonito:

Código
  1. function makeLinks(string) {
  2.    const regex = /((http|https)\:\/\/)?[\w0-9\-\.]{1,255}\.[\w]{2,63}(\/[\w_\.\/\#]*)?/ig;
  3.    const output = string.match(regex);
  4.  
  5.    if (!output || output.length < 1) {
  6.        return string;
  7.    }
  8.  
  9.    output.forEach((link) => {
  10.        let url = link.toLowerCase();
  11.            url = (!/^https?:\/\//.test(url) ? `http://${url}` : url);
  12.  
  13.        string = string.replace(link, `<a href="${url}" target="_blank">${link}</a>`);
  14.    });
  15.  
  16.    return string;
  17. }


Código
  1. console.log(makeLinks('Puedes leer más sobre tortugas en "https://es.wikipedia.org/wiki/Testudines" y para todo lo demás google.com'));


Y todo esto, te lo puedes ahorrar con:

Código
  1. <script src="linkify.min.js"></script>
  2. <script src="linkify-html.min.js"></script>
  3. <script>
  4.    console.log(linkifyHtml('Puedes leer más sobre tortugas en "https://es.wikipedia.org/wiki/Testudines" y para todo lo demás google.com', {
  5.        className: '',
  6.        defaultProtocol: 'http'
  7.    }));
  8. </script>

... pero no quieres usar librerías de terceros xD


Saludos

jaja me encanta como me decis al final "pero no quieres usar librerias de terceros" jaja... no, el tema es que las liberias de terceros (no se si todas) te ofrecen más cosas de las que quizás en mi proyecto necesito... yo se que jquery es una libreria de terceros que ofrece más cosas por ahí que yo vaya a necesitar pero es diferente... veo que es muy engorroso esto de detectar una url plana y pasarla a html y no me va a quedar de otra que usar linkify xD pero no porque no use... uso si no hay más remedio.. GRACIAS! xD
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
« Respuesta #5 en: 2 Julio 2020, 00:12 am »

#!drvy , intenta convertir esto con tu función en php:

Citar

Citar
Test. <a href="<a href="http://google.com/" target="_blank">http://google.com/</a>" target="_blank"><a href="http://google.com/" target="_blank">http://google.com/</a></a> y <a href="<a href="http://google.com/" target="_blank">http://google.com/</a>" target="_blank"><a href="http://google.com/" target="_blank">http://google.com/</a></a> test.

Tu función es recursiva y no respeta las posiciones de cada match, reemplaza los enlaces según el valor de la expresión encontrada independiente si hay más de una o no.

Hay maneras mas eficientes como por ejemplo la de https://stackoverflow.com/questions/1960461/convert-plain-text-urls-into-html-hyperlinks-in-php

Código
  1. $url = '@(http(s)?)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
  2. $string = preg_replace($url, '<a href="http$2://$4" target="_blank" title="$0">$0</a>', $string);
  3. echo $string;

Pero en mi caso para estar totalmente seguro y evitar el uso excesivo de memoria al intentar parsear textos muy grandes sobre el motor de expresión regular y evitar vulnerabilidades (porque el ejemplo que puse de stackoverlow tiene xss) lo que haría sería ir en busca de todos los espacios en blanco, ponerle coordenadas en bytes y luego procesar cada texto completo y validar si es un enlace, y si lo es entonces reemplazar, para ello utilizaría un buffer principal donde se vaya acumulando el resultado y eliminando el original, como una pila pero de bytes. No usaría explode() porque eso podría generar arrays demasiado grandes.

De todas maneras el xss se puede evitar si escapas todo el string antes de crear los enlaces con htmlspecialchars y ENT_QUOTES.
« Última modificación: 2 Julio 2020, 00:21 am por WHK » En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
« Respuesta #6 en: 2 Julio 2020, 09:52 am »

Mmm tienes razón xD Supongo se podria arreglar añadiendo una lista de dominios ya reemplazados para evitar que salten dos veces.

La funcion esa esta bastante guay pero habría que añadirle el u flag para soporte unicode y aparte del XSS que mencionas, convierte urls como (http://google.com) lo cual rompe el enlace entero (curiosamente el foro tiene el mismo problema jaja).

Citar
y luego procesar cada texto completo y validar si es un enlace, y si lo es entonces reemplazar, para ello utilizaría un buffer principal donde se vaya acumulando el resultado y eliminando el original, como una pila pero de bytes

Pero tendrías el mismo problema. ¿Y si el enlace va entre paréntesis sin espaciado? ¿Y si en una parte es google.com, en otra parte es http://google.com y en otra es https://google.com/holamundo?

Las librerías que hacen estas cosas ya han pasado por estos problemas xD

Saludos
« Última modificación: 2 Julio 2020, 09:53 am por #!drvy » En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
« Respuesta #7 en: 3 Julio 2020, 06:31 am »

Citar
¿Y si el enlace va entre paréntesis sin espaciado?

De eso se encarga el RFC y la expresión regular, una url no puede comenzar con parentesis pero si terminar en el, por eso en github, wikipedia, wordpress y demás cuando pones una url en parentesis suelen incluir el cierre de parentesis unicamente y eso es normal.

Citar
Supongo se podria arreglar añadiendo una lista de dominios

Da igual si el dominio está repetido, terminarás pisando uno sobre el otro porque el string que vas a procesar siempre será el mismo y este ya contendrá encierre de etiquetas <a>.

Citar
Pero tendrías el mismo problema

No porque haces una pila y procesas palabra por palabra, nunca vuelves a procesar la misma palabra dos veces.
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
« Respuesta #8 en: 3 Julio 2020, 07:47 am »

Mira, hice una función, aver que opinas:

Código
  1. <?php
  2.  
  3. function parse($string){
  4.  
  5.    // Listado de etiquetas y propiedades permitidas
  6.    $availables = array(
  7.        // [etiqueta], [propiedades,]
  8.        'p'     => array('style', 'class', 'id'),
  9.        'a'     => array('href',  'style', 'class', 'id', 'title'),
  10.        'span'  => array('style', 'class'),
  11.        'b'     => array('style', 'class'),
  12.        'i'     => array('style', 'class'),
  13.        's'     => array('style', 'class'),
  14.        'table' => array('style', 'class', 'id', 'rows', 'cols', 'width'),
  15.        'thead' => array(),
  16.        'tbody' => array(),
  17.        'tr'    => array(),
  18.        'td'    => array(),
  19.        'div'   => array('style', 'class', 'id'),
  20.        'ul'    => array('style', 'class', 'id'),
  21.        'li'    => array('style', 'class')
  22.    );
  23.  
  24.    try
  25.    {
  26.        $dom = new DOMDocument();
  27.        @$dom->loadHTML('
  28.            <html>
  29.                <body>
  30.                    <div>'.$string.'</div>
  31.                </body>
  32.            </html>
  33.        ');
  34.        $string = null; // Libera la memoria
  35.    }
  36.    catch(Exception $e)
  37.    {
  38.        // Contenido corrupto, etiquetas sin cerrar,
  39.        // intento de XSS, etc.
  40.        return '';
  41.    }
  42.  
  43.    $id = 0;
  44.    foreach($dom->getElementsByTagNameNS('', '*') as $tag)
  45.    {
  46.        $id++;
  47.        if($id < 4)
  48.        {
  49.            continue;
  50.        }
  51.  
  52.        if(!in_array($tag->nodeName, array_keys($availables)))
  53.        {
  54.            // Etiqueta no permitida
  55.            $escaped = $dom->createTextNode(htmlspecialchars(
  56.                $dom->saveHTML($tag),
  57.                ENT_QUOTES
  58.            ));
  59.            $tag->parentNode->replaceChild($escaped, $tag);
  60.        }
  61.        else
  62.        {
  63.            // Etiqueta permitida
  64.  
  65.            // Busca todos los atributos de la etiqueta
  66.            foreach($tag->attributes as $attribute)
  67.            {
  68.                // Propiedad no permitida?
  69.                if(!in_array(
  70.                    strtolower($attribute->name),
  71.                    $availables[strtolower($tag->nodeName)]
  72.                ))
  73.                {
  74.                    // Elimina el atributo no permitido
  75.                    $tag->removeAttribute($attribute->name);
  76.                }
  77.            }
  78.        }
  79.    }
  80.  
  81.    return trim(substr($dom->saveHTML(
  82.        $dom->getElementsByTagName('body')[0]->childNodes[1]
  83.    ), 5, -6));
  84. }
  85.  
  86. echo parse('
  87.    <ul>
  88.        <li><a onclick="alert(0)" style="color:red;"
  89.               href="http://google.com/">http://google.com/</a></li>
  90.        <li>http://google.com/</li>
  91.        <li><script>alert(0)//http://google.com/</script></li>
  92.        <li><b>http://google.com/</b></li>
  93.    </ul>
  94. ');

Código:
    <ul>
        <li><a style="color:red;" href="http://google.com/">http://google.com/</a></li>
        <li>http://google.com/</li>
        <li>&amp;lt;script&amp;gt;alert(0)//http://google.com/&amp;lt;/script&amp;gt;</li>
        <li><b>http://google.com/</b></li>
    </ul>

Si el usuario ingresa caracteres no permitidos o etiquetas falsas o etiquetas mal formadas o sin cerrar, etc arrojará una excepción y retornará un contendo en blanco, asi que desde el código final dices que si el input está en blanco entonces el usuario debe volver a ingresar el texto.

Claramente esto funciona para habilitar etiquetas HTML y sólo sirve si el navegador ya envía el contenido en este formato, quiere decir que el usuario tendrá que ingresar su mensaje en un editor thml reducido así como wordpress, por ejemplo usando ckeditor. Así ya no necesitarás transformar las urls a enlaces, simplemente haces que el sitio web desde el lado del input ya integre formato html, o si no, también sirve para sanitizar tus conversiones de enlace con expresión regular y habilitar únicamente a los enlaces, pero sería un tanto redundante, en ves de eso es mejor que el input ya venga con los enlaces construidos por el mismo usuario o creados por javascript.

Saludos.
« Última modificación: 3 Julio 2020, 08:00 am por WHK » En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript?
« Respuesta #9 en: 3 Julio 2020, 09:42 am »

De eso se encarga el RFC y la expresión regular, una url no puede comenzar con parentesis pero si terminar en el, por eso en github, wikipedia, wordpress y demás cuando pones una url en parentesis suelen incluir el cierre de parentesis unicamente y eso es normal.

No es tan sencillo. Un paréntesis en el dominio o en tld no está permitido. Y aunque técnicamente está permitido en la query, pocas veces se ve sin encode. El mismo PHP por ejemplo te hace encoding sobre los paréntesis tanto con urlencode como con rawurlencode.

De todos modos, puse paréntesis como cualquier otro carácter, incluido mayor o menor que (<>)  o un backslash (\) que por otro lado no son caracteres válidos.


Y bueno, la función esta bastante bien, pero creo que el provisto era precisamente convertir texto plano xD

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pregunta simple : Porque no puedo hacer esto?
Programación Visual Basic
CAR3S? 2 3,205 Último mensaje 9 Octubre 2011, 17:08 pm
por CAR3S?
[Pregunta] Como hacer esto
Desarrollo Web
Urketinn 4 2,896 Último mensaje 10 Mayo 2014, 09:19 am
por Urketinn
[Pregunta]: ¿Cómo puedo hacer qué esto funcione?
Desarrollo Web
Leguim 2 2,992 Último mensaje 21 Mayo 2020, 11:53 am
por @XSStringManolo
[Pregunta]: ¿Cómo puedo hacer esto con los recapchas de google?
Desarrollo Web
Leguim 1 2,870 Último mensaje 27 Julio 2020, 21:44 pm
por Leguim
[Pregunta]: ¿Cómo puedo hacer esto con $.ajax?
Desarrollo Web
Leguim 2 4,440 Último mensaje 4 Septiembre 2021, 06:32 am
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines