2011-10-20 8 views
12

Estoy editando un formulario de búsqueda e intentando protegerme contra caracteres especiales en la base de datos. En el formulario de búsqueda JSP, un (selección múltiple) desplegable permite a los usuarios seleccionar las descripciones que se utilizarán en la consulta (Nota: las descripciones es una lista de cadenas):Solicitar parámetro Perder signo más

<select id="descriptionSelect" multiple="multiple"> 
    <c:forEach items="${descriptions}" var="description"> 
     <option value="${fn:escapeXml(description)}")}">        
      <c:out value="${description}" /> 
     </option> 
    </c:forEach> 
</select> 

Cuando el formulario sostiene, en la página genera dinámicamente la URL que toma los parámetros de consulta en la URL (fea, lo sé, las manos están atadas). Aquí está el snipet haciendo el segmento de descripción.

var descriptionSelectBox = document.getElementById("descriptionSelect"); 
var descriptionsUrlAddition = ""; 

for (var i = 0; i < descriptionSelectBox.options.length; i++) { 
    if (descriptionSelectBox.options[i].selected) { 
     descriptionsUrlAddition += "&descriptions=" + escape(descriptionSelectBox.options[i].value); 
    } 
} 

que tienen una entrada de prueba en la base de datos cuya descripción es:

AAA `~ @ # $%^& *() _ + - = {} | [] \:";' <>?,./Y esto tiene muchos caracteres especiales.

Con el código anterior, por alguna razón, cuando la solicitud llega al controlador, la descripción pierde el signo + (se convierte en un espacio).

¿Alguien sabe lo que podría estar pasando y cómo solucionarlo? No estoy seguro si tiene algo que ver con el uso especial de +, o qué. Podría editar cómo se llena la lista de descripciones (tal vez escapando allí) Si ofrece esto como sugerencia, use el código específico de Java (sin clases de Apache escape utils, etc.)

Si ayuda, el uso de alertas en JavaScript indica que el signo + no se está transformando antes de Buscando la solicitud

Respuesta

26

+ significa "espacio" en las URL. Reemplácelo con %2B. Puede hacer esto justo después de componer descriptionsUrlAddition, por ejemplo.

descriptionsUrlAddition = descriptionsUrlAddition.replace('+', '%2B'); 
+0

¿Cómo implementaría esto sin embargo? –

+0

@Rachel G., simplemente reemplaza todos los signos '+' con '% 2B' en la cadena URL. Una vez que su URL está compuesta y la tiene como una cadena, puede simplemente usar el método 'replace()' de 'String'. Ejemplo agregado. – rid

+0

Agregue el código (escape (descriptionSelectBox.options [i] .value) .replace ("+", "% 2B")) a su respuesta y lo marcaré como correcto. Gracias =) –

0

Debe usar en la parte frontal La función encodeuri javascript codifica sus parámetros.

Cuestiones relacionadas