2010-01-21 36 views
42

Khi làm công việc này trong PHP, người ta có thể đáp ứng loại này phát hành:Thực tiễn tốt nhất để đặt thuộc tính html qua PHP là gì?

<span title="<?php echo $variable;?>">... 

Vấn đề là nếu $variable chứa dấu ngoặc kép, nên thay đổi nó để \"

Và đó không phải là toàn bộ câu chuyện được nêu ra :

<span title='<?php echo $variable;?>'>... 

Trong trường hợp này, chúng tôi cần thay đổi dấu nháy đơn thành \', nhưng để lại dấu ngoặc kép.

Vậy làm cách nào chúng ta có thể làm điều đó theo cách thức tổng quát?

Trả lời

63

Bạn luôn muốn sang HTML mã hóa mọi thứ bên trong thuộc tính HTML mà bạn có thể làm với htmlspecialchars:

<span title="<?php echo htmlspecialchars($variable); ?>"> 

Bạn có thể muốn thiết lập các tham số thứ hai ($quote_style) để ENT_QUOTES.

Nguy cơ tiềm năng duy nhất là $variable có thể đã được mã hóa, vì vậy bạn có thể muốn thiết lập các tham số cuối cùng ($double_encode) để false.

+2

Xác nhận với html5 thông số kỹ thuật ở đây: http://stackoverflow.com/questions/5320177/what-values-can-i-put-in-an-html-attribute-value –

+0

1 cho đề cập đến "ENT_QUOTES". Tôi đã sử dụng chức năng này nhưng dấu ngoặc kép sẽ làm hỏng html. – danielson317

3

Vâng, trước khi bạn xuất bất kỳ văn bản nào vào HTML, bạn nên thoát nó bằng cách sử dụng htmlspecialchars(). Vì vậy, chỉ cần chắc chắn (double) quote được thay đổi một cách chính xác.

Chú ý đến tham số thứ hai của hàm đó.

0

Để giải quyết chỉnh sửa của bạn [Edit: mà bạn đã gỡ bỏ khi đó]: Khi bạn đặt tự động JavaScript vào trang web của bạn, bạn nên trước biết khá tốt, những gì nó sẽ trông như thế nào. Khác bạn mở cửa rộng rãi cho các cuộc tấn công XSS. Điều đó không có nghĩa là bạn phải biết mọi dấu ngoặc kép, nhưng bạn nên biết đủ để quyết định cách nhúng nó vào dòng nơi bạn cuối cùng xuất nó trong tệp HTML.

Ngoài ra,

<a onclick="func(&apos;l&apos;)"> 

hoạt động chính xác như

<a onclick="func('l')"> 
Các vấn đề liên quan