Làm thế nào để tôi thoát khỏi một trích dẫn?


188

Làm cách nào tôi có thể thoát khỏi một '(trích dẫn đơn) trong JavaScript?

Đây là nơi tôi đang cố gắng sử dụng nó:

<input type='text' id='abc' value='hel'lo'>

Kết quả cho mã trên là "hel" được điền vào hộp văn bản. Tôi đã cố gắng thay thế 'bằng \', nhưng đây là những gì tôi đang nhận được.

<input type='text' id='abc' value='hel\'lo'>

Kết quả cho mã trên là "hel \" được điền vào hộp văn bản.

Làm thế nào tôi có thể thoát thành công các dấu ngoặc đơn?


Này Ravi, đây là một câu hỏi html. Tôi đã đặt lại câu hỏi dưới dạng HTML, nhưng bạn có thể muốn thay đổi câu hỏi đó trong câu hỏi của mình.
Benjamin Manns

Câu trả lời:


357

Bạn có thể sử dụng các thực thể HTML:

  • &#39; cho '
  • &#34; cho "
  • ...

Để biết thêm, bạn có thể xem các tham chiếu thực thể Ký tự trong HTML .


39
Tại sao người ta nên sử dụng dấu ngoặc kép cho các giá trị thuộc tính?
Gumbo

5
@Pascal MARTIN: XML cũng cho phép trích dẫn đơn cho các giá trị thuộc tính. (Xem w3.org/TR/xml/#NT-AttValue )
Gumbo

4
@Gumbo: wooo! Tôi không nghĩ rằng tôi đã từng thấy bất kỳ tài liệu XML nào đang sử dụng các giá trị thuộc tính arround trích dẫn đơn; Vì vậy, tôi đã không nghĩ rằng điều này thực sự hợp lệ ;; Tôi vừa (một lần nữa) học được điều gì đó trong khi trả lời một câu hỏi; Vì vậy, cảm ơn những ý kiến ​​đó!
Pascal MARTIN

5
Tôi biết điều này đã cũ, nhưng tôi nghĩ rằng đáng chú ý rằng có một thực thể HTML cho ":&quot;
daiscog

1
@Pascal, trình xác nhận w3c hiển thị dấu ngoặc đơn là hợp lệ cho các thuộc tính. Và xem stackoverflow.com/questions/2210430/
Mạnh

62

Bạn có thể sử dụng &apos;(đó là iffy trong IE) hoặc &#39;(nên hoạt động ở mọi nơi). Để biết danh sách toàn diện, hãy xem Tài liệu tham khảo nhân vật có tên HTML5 của W3C hoặc bảng thực thể HTML trên WebPl platform.org .


Wow, đã được một lúc kể từ khi tôi viết bài này. Cảm ơn bạn đã nắm bắt được - Tôi đã cập nhật các liên kết đến hai bảng trên W3C và WebPl Platform.org.
Benjamin Manns

Các công việc này "ở mọi nơi" ngoại trừ trong các thuộc tính VXML <var> Biểu thức trong đó việc thoát thêm là cần thiết vì trong VXML <var> một giá trị biến Chuỗi được biểu thị dưới dạng dấu ngoặc đơn trong dấu ngoặc kép thông thường của định nghĩa thuộc tính: <var name = "myvar" expr = "'hel \ & apos; lo'" />
Steve Cohen

9

Khi bạn ở trong bối cảnh của HTML, bạn cần sử dụng HTML để thể hiện ký tự đó. Và đối với HTML, bạn cần sử dụng tham chiếu ký tự số &#39; ( &#x27;thập lục phân):

<input type='text' id='abc' value='hel&#39;lo'>

nhưng tôi không hiểu ý bạn là context of htmlgì?
mã hóa_idiot

@coding_idiot Hãy xem các mã thông báo khác nhau mà trình phân tích cú pháp HTML có thể gặp phải trong quá trình phân tích cú pháp . Mỗi trạng thái có một bộ quy tắc phân tích cú pháp khác nhau được kích hoạt dựa trên đầu vào. Không phải mọi nhà nước đều cho phép tham khảo nhân vật. Bây giờ nếu bạn nhìn vào giá trị thuộc tính (trích dẫn đơn) , bạn có thể thấy rằng một &biểu thị bắt đầu của một tham chiếu ký tự.
Gumbo

7

Thể hiện nó dưới dạng một thực thể văn bản (ASCII 39):

<input type='text' id='abc' value='hel&#39;lo'>



-1

sử dụng javascript inbuild chức năng thoát và unescape

ví dụ

var escapedData = escape("hel'lo");   
output = "%27hel%27lo%27" which can be used in the attribute.

again to read the value from the attr

var unescapedData = unescape("%27hel%27lo%27")
output = "'hel'lo'"

Điều này sẽ hữu ích nếu bạn có dữ liệu chuỗi lớn json được sử dụng trong thuộc tính


escapekhông phải là unicode an toàn. Các đặc điểm kỹ thuật khuyên chống lại việc sử dụng nó.
Quentin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.