2013-03-09 22 views
6

Tôi chỉ muốn các ký tự chưa mã hóa được chuyển đổi thành thực thể html mà không ảnh hưởng đến các thực thể đã có mặt. Tôi có một chuỗi trước đó đã được mã hóa thực thể, ví dụ .:htmlentities() thực thể mã hóa kép trong chuỗi

gaIUSHIUGhj>‐ hjb×jkn.jhuh>hh> … 

Khi tôi sử dụng htmlentities(), các & vào đầu của đơn vị được mã hóa một lần nữa. Điều này có nghĩa ‐ và các tổ chức khác có họ & mã hóa để &:

× 

tôi đã cố gắng giải mã chuỗi hoàn chỉnh, sau đó mã hóa nó một lần nữa, nhưng nó dường như không hoạt động đúng. Đây là mã tôi đã thử:

header('Content-Type: text/html; charset=iso-8859-1'); 
... 

$b = 'gaIUSHIUGhj>‐ hjb×jkn.jhuh>hh> …'; 
$b = html_entity_decode($b, ENT_QUOTES, 'UTF-8'); 
$b = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $b); 
$b = htmlentities($b, ENT_QUOTES, 'UTF-8'); 

Nhưng dường như nó không hoạt động đúng cách. Có cách nào để ngăn chặn hoặc ngăn chặn điều này xảy ra không?

Trả lời

6

Đặt biến số $double_encode tùy chọn thành false. Xem documentation để biết thêm thông tin.

mã kết quả của bạn sẽ giống như thế:

$b = htmlentities($b, ENT_QUOTES, 'UTF-8', false); 
4

Bạn đã làm tốt nhìn vào documentation, nhưng bạn bị mất một phần tốt nhất. Nó có thể là khó để giải mã điều này đôi khi:

//  > > > > > > Scroll >>> > > > > >  Keep going. > > > >>>>>> See below. <<<<<< 
string htmlentities (string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]]) 

Nhìn vào phút cuối.

Tôi biết. Khó hiểu. Tôi thường bỏ qua dòng chữ ký và chuyển thẳng xuống khối tiếp theo (Parameters) cho các hình mờ trên mỗi đối số.

Vì vậy, bạn muốn sử dụng đối số double_encoded ở cuối để nói htmlentities không để tái mã hóa (và có thể bạn muốn gắn bó với UTF-8 trừ khi bạn có một lý do cụ thể không):

$str = "gaIUSHIUGhj>&hyphen; hjb&times;jkn.jhuh>hh> &hellip;"; 

// Double-encoded! 
echo htmlentities($str, ENT_COMPAT, 'utf-8', true) . "\n"; 

// Not double-encoded! 
echo htmlentities($str, ENT_COMPAT, 'utf-8', false); 

https://ignite.io/code/513ab23bec221e4837000000

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