2011-01-09 10 views
15

Estoy tratando de convertir entidades HTML de una cadena fuente a su equivalente de caracteres literales.html_entity_decode problema en PHP?

Por ejemplo:

<?php 

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

?> 

Si bien esto convierte justamente la entidad en la pantalla, cuando miro el código HTML que sigue mostrando la entidad explícita. Necesito cambiar eso para que literalmente convierta la entidad ya que no estoy usando la cadena dentro de una página HTML.

¿Alguna idea sobre lo que estoy haciendo mal?

FYI estoy enviando la cadena convertida a servicio de notificación push de Apple:

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

La línea de eco es irrelevante para ser honesto. $ converted todavía tiene la entidad en él (estoy enviando convertido a un iPhone a través de una API). – mootymoots

+0

Sí, pensé; ese no es el problema. He proporcionado una respuesta. – BoltClock

+0

Sin parámetros, solo convierte < > & atrás. – mario

Respuesta

31

&#8211; mapas a un carácter UTF-8 (el guión largo) por lo que necesita para especificar UTF-8 como la codificación de caracteres:

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

Todavía obtengo la entidad cuando veo la fuente en ese ...? – mootymoots

+0

@mootymoots: Lo probé, obtuve el carácter sin formato en lugar de la entidad. Me pregunto qué más podría estar causando ... ¿quizás la codificación del documento HTML? – BoltClock

+0

se convierte en la página, pero no en la fuente ...? Buscando en cromo – mootymoots

4

Intente utilizar 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; 
?> 

Esto debería funcionar Y debe convertirse también en la fuente