2010-10-20 2 views
6

My Description содержит apstrophe ('). Как избежать этого.Unterminated string constant

<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), "'", "'") %>" это описание часть в моем JSP скриптлете, который содержит apstrophe (')

Мой HTML Посмотреть

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

Вы могли бы подумать, что структура будет иметь некоторый способ HTML-экранирования текста. Черт, даже * PHP * может это сделать. –

+0

Кстати, не помещайте JavaScript в аргумент 'href'. Использовать событие onclick –

+0

Что такое метод 'pageBean.replace()'? – irishbuzz

ответ

6

зарезервированной HTML символов следует использовать HTML entities апостроф затем reprecented в &#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

Использование \'

Внутри HTML тега , вам нужно превратить строку в объекты HTML, поэтому цитата становится &#039;

Внутри чисто JavaScript, вы можете также избежать цитаты с \'

+0

Где я должен использовать – John

+1

'"' это путь, HTML не позволяет избежать обратного слэша. @John, замените «Рабочий» на «Рабочий " s». –

+0

@John Вы не указываете язык, который используете, но он почти наверняка имеет функцию 'addlashes', чтобы добавить обратную косую черту, или' htmlentities', чтобы преобразовать все специальные символы в их эквиваленты сущностей. –

1

Вызов функции из HTML и положить JavaScript в этой функции. Это обойдется вашей проблемой, но я думаю, что это немного лучше, так или иначе.

2

Обычно \ 'должен работать, но кажется, что иногда вам нужно использовать' '(двойной апостроф).

Попробуйте это:

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

или:

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

Один из них должен работать (из моего опыта).

Для атрибутов в пределах HTML-тегов, я хотел бы использовать "(кавычки), а не '(апостроф).

+0

Где я должен использовать – John

+0

, можно заменить мой код и показать его. – John

+0

Это зависит от того, откуда идет ваша строка. Я предполагаю, что «форма компенсации работника» будет помещена в некоторые свойства в конечном итоге (по крайней мере, это должно быть, я бы не стал жестко кодировать), в таком случае вам следует избегать ее в файле свойств. В противном случае просто избегайте его при кодировании. –

1

Может быть, вы могли бы использовать код юникода символов вместо? (\ U0027)

+0

Где я должен использовать – John

+0

Я ожидаю, что вы сможете использовать его везде, где у вас есть апостроф, который не предназначен для разделителя. – Curtis

1

вы должны заменить ' с #39; перед отрисовкой. Вы можете сделать это в
- файл свойств, откуда это исходит из
- в коде в ASP

BTW, что вы пытаетесь в этом направлении?

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

Возможно

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

должны делать свою работу.

1

Нормальный JSP разработчик будет abandon старомодный скриптлеты и использовать JSTL c:out или fn:escapeXml вместо этого. Оба ускользают от predefined XML entities, как ' до &#39; и так далее.

Вот пример с 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}"> 

Вы, возможно, потребуется только изменить модель быть больше fullworthy бина.