Cách thoát dấu ngoặc kép trong thuộc tính tiêu đề


195

Tôi đang cố gắng sử dụng một chuỗi chứa dấu ngoặc kép trong thuộc tính tiêu đề của một neo. Cho đến nay tôi đã thử những điều này:

<a href=".." title="Some \"text\"">Some text</a>
<!-- The title looks like `Some \` --!>

<a href=".." title="Some &quot;text&quot;">Some text</a>
<!-- The title looks like `Some ` --!>

Xin lưu ý rằng sử dụng dấu ngoặc đơn không phải là một lựa chọn.


18
@ Yêu cầu đọc câu hỏi mà nó nói "trích dẫn đơn không phải là một lựa chọn".
Nils Riedemann

2
@harpax - Tôi chỉ tò mò tại sao trích dẫn đơn không phải là một lựa chọn?
Bert F

3
Dấu ngoặc đơn không phải là html hợp lệ.
chân trời

1
Ví dụ thứ hai của bạn nên hoạt động hoàn toàn hoàn hảo. Trong trình duyệt nào bạn đang thấy vấn đề?
Olly Hodgson

1
@harpax: có lẽ bạn nên làm rõ "trích dẫn đơn không phải là một lựa chọn". Tôi đã đoán rằng bạn đề cập đến các trích dẫn đơn "bên trong" chuỗi "không phải là một tùy chọn (như được hiển thị cho người dùng), nhưng chỉ cần lật các trích dẫn đơn và kép như Haim hiển thị ở trên sẽ ổn.
Christian.K

Câu trả lời:


284

Biến thể này -

<a title="Some &quot;text&quot;">Hover me</a>

Là chính xác và nó hoạt động như mong đợi - bạn thấy dấu ngoặc kép bình thường trong trang được hiển thị.


Vâng. <a href="#" title="Foo &quot;Bar&quot;">Testing</a><a href="#" title="Smart quotes &#8221;Bar&#8220;">Testing too</a>làm việc cho tôi.
Olly Hodgson

5
@Maris: Chà ... tôi không thấy các trích dẫn bình thường trong trang được hiển thị khi tôi thực hiện & quot; (Firefox, Chrome). Tại sao?
Krzysztof Trzos

@Maris, vấn đề tương tự ở đây. Xem văn bản "& quot;" xuất hiện trong cả IE và Chrome khi người dùng kết hợp với phần tử.
rstackhouse

Làm việc tuyệt vời với nội dung html được nhúng trong thuộc tính (đối với javascript để tạo văn bản có thể chỉnh sửa):data-editable-note="<?php echo str_replace('"', '&quot;', $note); ?>"><?php echo mark::up($note); ?></div>
WEBjuju

23

Đây là một đoạn các ký tự thoát HTML được lấy từ một trang được lưu trong bộ nhớ cache trên archive.org :

&#060   |   less than sign  <       
&#064   |   at sign @       
&#093   |   right bracket   ]       
&#123   |   left curly brace    {       
&#125   |   right curly brace   }       
&#133   |   ellipsis    …       
&#135   |   double dagger   ‡       
&#146   |   right single quote  ’       
&#148   |   right double quote  ”       
&#150   |   short dash  –       
&#153   |   trademark   ™       
&#162   |   cent sign   ¢       
&#165   |   yen sign    ¥       
&#169   |   copyright sign  ©       
&#172   |   logical not sign    ¬       
&#176   |   degree sign °       
&#178   |   superscript 2   ²       
&#185   |   superscript 1   ¹       
&#188   |   fraction 1/4    ¼       
&#190   |   fraction 3/4    ¾       
&#247   |   division sign   ÷       
&#8221  |   right double quote  ”       
&#062   |   greater than sign   >   
&#091   |   left bracket    [   
&#096   |   back apostrophe `   
&#124   |   vertical bar    |   
&#126   |   tilde   ~   
&#134   |   dagger  †   
&#145   |   left single quote   ‘       
&#147   |   left double quote   “   
&#149   |   bullet  •   
&#151   |   longer dash —   
&#161   |   inverted exclamation point  ¡   
&#163   |   pound sign  £   
&#166   |   broken vertical bar ¦   
&#171   |   double left than sign   «   
&#174   |   registered trademark sign   ®   
&#177   |   plus or minus sign  ±   
&#179   |   superscript 3   ³   
&#187   |   double greater-than sign    »   
&#189   |   fraction 1/2    ½   
&#191   |   inverted question mark  ¿   
&#8220  |   left double quote   “   
&#8212  |   dash    —   

9

Mã thoát &#34;cũng có thể được sử dụng thay vì &quot;.


3

Sử dụng &quot;là cách để làm điều đó. Tôi đã thử đoạn mã thứ hai của bạn và nó hoạt động trong cả Firefox và Internet Explorer.


2

Nó có thể hoạt động với bất kỳ ký tự nào trong danh sách ký tự HTML Escape , nhưng tôi gặp vấn đề tương tự với một dự án Java. Tôi đã sử dụng StringEscapeUtils.escapeHTML("Testing \" <br> <p>")và tiêu đề là <a href=".." title="Test&quot; &lt;br&gt; &lt;p&gt;">Testing</a>.

Nó chỉ hoạt động với tôi khi tôi thay đổi StringEscapeUtils thành StringEscapeUtils.escapeJavascript("Testing \" <br> <p>")và nó hoạt động trong mọi trình duyệt.


Theo tôi, giải pháp tốt nhất
Mohammed Rafeeq 14/11/14

Tốt nếu bạn đang sử dụng Java, nhưng vì người hỏi ban đầu đang yêu cầu HTML, có lẽ đây không phải là một tùy chọn.
Paul

1

Có ít nhất một tình huống sử dụng các trích dẫn đơn sẽ không hoạt động và đó là nếu bạn đang tạo đánh dấu "nhanh chóng" từ JavaScript. Bạn sử dụng dấu ngoặc đơn để chứa chuỗi và sau đó bất kỳ thuộc tính nào trong đánh dấu có thể có dấu ngoặc kép cho giá trị của nó.


1

Có lẽ bạn có thể sử dụng JavaScript để giải quyết vấn đề trình duyệt chéo của mình. Nó sử dụng một cơ chế thoát khác, một cơ chế mà bạn rõ ràng đã quen thuộc:

(reference-to-the-tag).title = "Some \"text\"";

Nó không tách biệt hoàn toàn các chức năng của HTML, JavaScript và CSS theo cách mọi người muốn bạn ngày nay, nhưng bạn cần làm ai hạnh phúc? Người dùng hoặc kỹ thuật viên của bạn mà bạn không biết?


Quá mức cần thiết khi esult mong muốn có thể đạt được theo cách đơn giản hơn nhiều.
Paul

-3

Bạn có thể sử dụng mã PHP này để liệt kê các ký tự đặc biệt ...

<table border="1"><?php for($i=33;$i<9000;$i++)echo "<tr><td>&#38;#$i;<td>&#".$i.";"; ?></table>
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.