2010-10-20 6 views
6

Mój opis zawiera apstrophe ('). Jak uciec z tego.Nieokreślona stała ciągu znaków

<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), "'", "'") %>" jest częścią opis w moim JSP skrypty, które zawiera apstrophe (')

Moje HTML Zobacz

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

Można by pomyśleć, że framework będzie miał jakiś sposób na ucieczkę z tekstu w HTML. Heck, nawet * PHP * może to zrobić. –

+0

Nawiasem mówiąc, nie wstawiaj JavaScriptu do argumentu 'href'. Użyj zdarzenia 'onclick' –

+0

Jaka jest intencja metody' pageBean.replace() '? – irishbuzz

Odpowiedz

6

zastrzeżonych HTML znaków należy użyć HTML entities apostrof jest następnie reprecented jak &#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

Zastosowanie \'

Wewnątrz znacznika HTML , musisz zmienić ciąg w elementy HTML, więc cytat staje &#039;

Wewnątrz czystym JavaScripcie, można też uciec cytat z \'

+0

Gdzie powinieneś użyć – John

+1

'"' jest sposobem, aby przejść tutaj, HTML nie pozwala na ukośnik odwrotny. @John, zamień "Worker's" na "Worker " s". –

+0

@John nie określasz języka, którego używasz, ale prawie na pewno ma on funkcję "addslashes", która dodaje do niej ukośniki odwrotne lub 'htmlentities', które konwertują wszystkie znaki specjalne na ich odpowiedniki encji. –

1

wywołania funkcji z kodu HTML, JavaScript i umieścić w tej funkcji. Zlikwiduje twój problem, ale myślę, że i tak jest to trochę lepsza praktyka.

2

Zwykle \ 'powinno działać, ale wydaje się, że czasami trzeba użyć' '(podwójny apostrof).

Spróbuj tego:

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

czyli

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

Jeden z nich powinien działać (z mojego doświadczenia).

przypadku atrybutów wewnątrz znaczników HTML, użyłbym "(cudzysłów) zamiast '(apostrof).

+0

Gdzie powinienem użyć – John

+0

można zastąpić mój kod i pokazać go. – John

+0

Zależy, skąd pochodzi twój ciąg. Zakładam, że "Formularz Kompensacji pracownika" zostanie ostatecznie umieszczony w niektórych właściwościach (przynajmniej powinien, nie będę go zakodowany), w takim przypadku powinieneś unikać tego w pliku właściwości. W przeciwnym razie po prostu unikaj tego podczas kodowania. –

1

Być może można użyć kodu Unicode zamiast? (\ U0027)

+0

Gdzie powinienem użyć – John

+0

Oczekuję, że możesz go użyć wszędzie, gdzie masz apostrof, który nie ma być ogranicznikiem. – Curtis

1

trzeba wymienić ' z #39; zanim zostanie wygenerowana. Można to zrobić w
- plik właściwości skąd to pochodzi
- w kodzie w ASP

BTW, co ty próbujesz w tym wierszu?

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

Może

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

powinien wykonać pracę.

1

Normalny deweloper JSP będzie abandon starej scriptlets i wykorzystanie JSTL c:out lub fn:escapeXml zamiast. Oba znaki uciekają od predefined XML entities, takich jak ' do &#39; i tak dalej.

Oto przykład z 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}"> 

może tylko trzeba zmienić model, aby być bardziej fullworthy JavaBeans.