¿Cómo evito la doble encoding URL cuando renderizo las URL en mi sitio web?

Los usuarios proporcionan tanto URL escaneadas como URL sin formato a mi sitio web en una entrada de texto; por ejemplo, considero que estas dos URL son equivalentes:

https://www.cool.com/cool%20beans https://www.cool.com/cool beans 

Ahora quiero renderizarlas como tags más adelante, al ver estos datos. Estoy atrapado entre codificar el texto dado y obtener estos enlaces:

    

O no codificarlo y obtener esto:

    

¿Cuál es la mejor salida desde el punto de vista de la experiencia del usuario con los navegadores modernos? Estoy dividido entre hacer un pase de desencoding sobre su entrada, o la segunda opción que enumeré arriba donde no codificamos el atributo href .

Si desea evitar la doble encoding de los enlaces, puede usar urldecode() en ambos enlaces, y luego urlencode() después, ya que decodificar una URL como ” https://www.cool.com/cool beans” devolvería el mismo valor, mientras que la deencoding ” https://www.cool.com/cool%20beans ” volvería con el espacio. Esto deja libre ambos enlaces para ser codificados correctamente.

Alternativamente, los caracteres codificados podrían escanearse para usar la función strpos() , por ej.

 if ($pos = strpos($url, "%20") { //Encoded character found } 

Lo ideal sería escanear una serie de caracteres codificados comunes, en lugar del “% 20”