2010-10-20 27 views
6

Mi descripción contiene una apstrophe ('). Cómo escapar de esoConstante de cadena sin terminar

<a href='javascript:select("<%= pageBean.replace(list.getColumn(0), "'", "'") %>", 
"<%= pageBean.replace(list.getColumn(1), "'", "'") %>");' title="<%=selRpt%>"> 
<span class='img-view'></span></a> 

"<%= pageBean.replace(list.getColumn(1), "'", "'") %>" es la parte descriptiva en mi JSP Scriptlet que contiene apstrophe (')

Mi vista HTML

<a href='javascript:select("JWCCA5", 
"Worker's Compensation Form - California Form 5020(New)");' 
title="Select Report"><span class='img-view'></span></a> 
+0

. Usted pensaría que el marco tendría alguna forma de escapular HTML del texto. Diablos, incluso * PHP * puede hacer eso. –

+0

Por cierto, no coloque JavaScript en el argumento 'href'. Use el evento 'onclick' –

+0

¿Cuál es la intención del método' pageBean.replace() '? – irishbuzz

Respuesta

6

Para reservada HTML caracteres que deben utilizar HTML entities un apóstrofe se reprecented entonces como &#39;:.

<a href='javascript:select(
    "<%= pageBean.replace(list.getColumn(0), "'", "&#39;") %>", 
    "<%= pageBean.replace(list.getColumn(1), "'", "&#39;") %>");' title="<%=selRpt%>"> 
<span class='img-view'></span></a> 
6

Uso \'

dentro de una etiqueta HTML , debes convertir la cadena en entidades HTML, por lo la cita se convierte en &#039;

Dentro JavaScript puro, también se puede escapar de la cita con un \'

+0

Donde debería usar – John

+1

'"' es el camino a seguir aquí, HTML no permite el escape de la barra invertida. @John, reemplace "Worker's" con "Worker " s". –

+0

@John no especifica el idioma que está utilizando, pero es casi seguro que tiene una función 'addslashes' de algún tipo para agregar barras diagonales inversas, o' htmlentities' para convertir todos los caracteres especiales en sus equivalentes de entidad. –

1

llamar a una función desde el HTML, JavaScript y poner su en esa función. Resolverá tu problema, pero creo que es un poco mejor la práctica de todos modos.

2

Normalmente \ 'debería funcionar, pero parece que a veces es necesario usar' '(doble apóstrofo).

prueba este:

<%= pageBean.replace(list.getColumn(0), "'", "\'" %> 

o:

<%= pageBean.replace(list.getColumn(0), "'", "''" 

Uno de ellos debe trabajar (desde mi experiencia).

Para los atributos dentro de las etiquetas HTML, yo usaría "(comillas) en lugar de '(apóstrofe).

+0

¿Dónde debería usar – John

+0

puede reemplazar mi código y mostrarlo? – John

+0

Depende de dónde provenga su cadena. Supongo que el "Formulario de Compensación del Trabajador" se colocará en algunas propiedades (al menos debería, no lo codificaría), en tal caso debe escapar en el archivo de propiedades. De lo contrario, simplemente escápate mientras codificas. –

1

Tal vez usted podría utilizar el código de caracteres Unicode en su lugar? (\ U0027)

+0

Dónde debería usar – John

+0

Espero que pueda usarlo en cualquier lugar que tenga un apóstrofo que no esté destinado a ser un delimitador. – Curtis

1

usted tiene que reemplazar el ' con #39; antes de que se hace. Puede hacerlo en
- el archivo de propiedades de donde viene esto
- en el código en ASP

Por cierto, ¿qué están tratando en esta línea?

"<%= pageBean.replace(list.getColumn(1), "'", "'") %>" 

Quizás

"<%= pageBean.replace(list.getColumn(1), "'", "&#39;") %>" 

debe hacer el trabajo.

1

Un desarrollador normal de JSP haría abandon pasado de moda scriptles y el uso JSTL c:out o fn:escapeXml lugar. Ambos escapes predefined XML entities como ' a &#39; y así sucesivamente.

He aquí un ejemplo con fn:escapeXml:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 
... 
<a href="javascript:select('${fn:escapeXml(list.columns[0])}', 
    '${fn:escapeXml(list.columns[1])}');" title="${title}"> 

Es posible que sólo tenga que cambiar el modelo de ser más una fullworthy Javabean.

Cuestiones relacionadas