2011-01-09 28 views
15

Tôi đang cố gắng chuyển đổi các thực thể HTML từ một chuỗi nguồn sang ký tự tương đương chữ của chúng.vấn đề html_entity_decode trong PHP?

Ví dụ:

<?php 

$string = "Hello &#8211; World"; 
$converted = html_entity_decode($string); 

?> 

Trong khi điều này một cách đúng đắn chuyển đổi đơn vị trên màn hình, khi tôi nhìn vào mã HTML nó vẫn hiển thị các thực thể rõ ràng. Tôi cần phải thay đổi điều đó để nó theo nghĩa đen chuyển đổi thực thể khi tôi không sử dụng chuỗi trong một trang HTML.

Bất kỳ ý tưởng nào về những gì tôi đang làm sai?

FYI Tôi gửi các chuỗi chuyển đổi sang dịch vụ Push thông báo của Apple:

$payload['aps'] = array('alert' => $converted, 'badge' => 1, 'sound' => 'default'); 
$payload = json_encode($payload); 
+0

Dòng tiếng vang không liên quan đến sự trung thực. $ conversion vẫn có thực thể trong đó (tôi đang gửi chuyển đổi sang iPhone thông qua API). – mootymoots

+0

Vâng tôi đã tìm; đó không phải là vấn đề. Tôi đã cung cấp một câu trả lời. – BoltClock

+0

Không có tham số, nó chỉ chuyển đổi < > & quay lại. – mario

Trả lời

31

&#8211; bản đồ đến một ký tự UTF-8 (gạch đầu), do đó bạn cần phải xác định UTF-8 như mã hóa ký tự:

$converted = html_entity_decode($string, ENT_COMPAT, 'UTF-8'); 
+0

Tôi vẫn nhận được thực thể khi tôi xem nguồn trên cái đó ...? – mootymoots

+0

@mootymoots: Tôi đã thử nghiệm nó, tôi nhận được ký tự thô thay vì thực thể. Tự hỏi điều gì khác có thể gây ra nó ... mã hóa của tài liệu HTML có lẽ? – BoltClock

+0

nó được chuyển đổi trên trang - nhưng không phải trong nguồn ...? Nhìn vào chrome – mootymoots

4

Hãy thử sử dụng charset

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
<?php 
$string = "Hello &#8211; World"; 
$converted = html_entity_decode($string , ENT_COMPAT, 'UTF-8'); 
echo $converted; 
?> 

này nên làm việc Và nó cũng phải được chuyển đổi trong nguồn

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