2010-10-20 37 views
6

Mô tả của tôi chứa dấu nháy đơn ('). Làm thế nào để thoát khỏi nó.Hằng số chuỗi không được chuẩn bị

<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), "'", "'") %>" là phần mô tả trong JSP Scriptlet của tôi, trong đó có apstrophe (')

HTML My Xem

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

Bạn sẽ nghĩ rằng khuôn khổ sẽ có một số cách HTML-thoát văn bản. Heck, thậm chí * PHP * có thể làm điều đó. –

+0

Nhân tiện, đừng đưa JavaScript vào đối số 'href'. Sử dụng sự kiện 'onclick' –

+0

Mục đích của phương thức' pageBean.replace() 'là gì? – irishbuzz

Trả lời

6

Đối dành HTML ký tự mà bạn nên sử dụng HTML entities Một dấu nháy đơn sau đó reprecented như &#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

Sử dụng \'

Bên trong một thẻ HTML , bạn cần phải biến chuỗi thành các thực thể HTML, vì vậy báo giá trở nên &#039;

Bên trong tinh khiết JavaScript, bạn cũng có thể thoát khỏi quote với một \'

+0

Tôi nên sử dụng – John

+1

'"' là cách nào để đến đây, HTML không cho phép thoát dấu gạch chéo ngược. @ John, thay thế "Công nhân" bằng "Công nhân " s". –

+0

@John bạn không chỉ định ngôn ngữ bạn đang sử dụng, nhưng gần như chắc chắn có chức năng 'addslashes' của một số loại để thêm dấu gạch chéo ngược, hoặc một' htmlentities' để chuyển đổi tất cả các ký tự đặc biệt thành tương đương thực thể của chúng. –

1

Gọi một hàm từ HTML, và đưa JavaScript trong chức năng đó. Nó sẽ giải quyết vấn đề của bạn, nhưng tôi nghĩ rằng nó thực hành tốt hơn một chút.

2

Thông thường \ 'nên hoạt động, nhưng có vẻ như đôi khi bạn cần phải sử dụng' '(dấu hai chấm).

Hãy thử điều này một:

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

hay:

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

Một trong số đó nên làm việc (từ kinh nghiệm của tôi).

Đối với thuộc tính trong thẻ HTML, tôi sẽ sử dụng "(báo giá đánh dấu) chứ không phải là '(apostrophe).

+0

Tôi nên sử dụng – John

+0

ở đâu có thể thay thế mã của mình và hiển thị mã đó. – John

+0

Nó phụ thuộc vào nơi chuỗi của bạn đến từ đâu. Tôi giả định rằng "hình thức bồi thường của người lao động" sẽ được đặt trong một số tài sản cuối cùng (ít nhất là nó nên, tôi sẽ không hardcode nó), trong trường hợp như vậy bạn nên thoát khỏi nó trong tập tin tài sản. Nếu không, chỉ cần thoát nó khi bạn viết mã. –

1

Có lẽ bạn có thể sử dụng mã ký tự unicode để thay thế? (\ U0027)

+0

Tôi nên sử dụng – John

+0

Tôi hy vọng bạn có thể sử dụng nó ở bất cứ đâu bạn có một dấu nháy đơn không có ý định là dấu phân cách. – Curtis

1

bạn phải thay thế ' với #39; trước khi nó được trả lại. Bạn có thể làm điều đó trong
- nộp các thuộc tính từ nơi này đến từ
- trong mã ASP

BTW, những gì bạn đang cố gắng trong dòng này?

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

lẽ

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

nên làm việc.

1

Một nhà phát triển JSP bình thường sẽ abandon old fashioned scriptlets và sử dụng JSTL c:out hoặc fn:escapeXml để thay thế. Cả hai đều thoát ra predefined XML entities như ' đến &#39; v.v.

Dưới đây là một ví dụ với 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}"> 

Bạn chỉ có thể cần phải thay đổi mô hình để có thêm một fullworthy JavaBean.

Các vấn đề liên quan