Tengo un campo de búsqueda en una aplicación de Rails. Se implementa de esta manera:
<%= text_field_tag :searchAny, params[:searchAny_params], placeholder: "Search", id: "search_input", class: "search-field" %> <%= submit_tag "Search", name: nil, id: "search-button", class: "search-button" %>
Cuando busco cadenas, que contienen espacios como: find something
, obtengo find something
en params, que luego se representa en la url como find+something
. Que yo sepa, los espacios solían escaparse a través de +, pero ahora deberían escaparse a través de% 20.
Me gustaría mucho cambiar a %20 en mi URL, porque accedo a la cadena de consulta en mi interfaz para que esté disponible para nuevas funciones de búsqueda o para analizarla en algún lugar y necesitaría el signo + como una cadena de consulta viable. Actualmente no puedo buscar house+
o +
, porque la función JS que escribí divide la cadena de búsqueda y actualmente tiene que reemplazar +
con space
.
var searchquery = searchParams.split('?').pop().split('&').pop().split('=')[1].replace(/[+]/g, ' ');
Después de mi refactorización, espero obtener la parte de la cadena de búsqueda de mi URL con% 20 para el espacio y dejar + disponible.
var searchquery = searchParams.split('?').pop().split('&').pop().split('=')[1].replace(/%20/, ' ');
¿Cómo puedo cambiar la forma en que se escapan los parámetros en la cadena de búsqueda?
Espero que alguien pueda ponerme en la dirección correcta. Gracias por adelantado.
Actualmente, mi aplicación Rails produce la siguiente URL:
https://www.domain.tld/collection/opac?searchAny=find+something
Preferiría que la cadena de consulta ya esté % escapada:
https://www.domain.tld/collection/opac?searchAny=find%20something
Según esta respuesta de una pregunta similar , puede usar la gema direccionable . O, alternativamente, puede intentar usar encodeUri() de Javascript para manejar la codificación de URL desde el lado frontal. Por ejemplo:
document.getElementById('search_button').addEventListener('click', function() { var searchInput = document.getElementById("search_input"); var encodedQuery = encodeURI(searchInput.value) // continue to use the encodedQuery as search query });
¡Espero que esto ayude!