2011-01-09 13 views
15

Sto provando a convertire le entità HTML da una stringa di origine al loro equivalente di carattere letterale.html_entity_decode problema in PHP?

Ad esempio:

<?php 

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

?> 

Mentre questo converte giustamente l'entità sullo schermo, quando guardo il codice HTML è ancora mostrando l'entità esplicito. Devo cambiarlo in modo che converta letteralmente l'entità poiché non sto usando la stringa all'interno di una pagina HTML.

Qualche idea su cosa sto facendo male?

FYI io mando la stringa convertita in servizio di notifica push di Apple:

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

La linea di eco è irrilevante per essere onesti. $ convertito ha ancora l'entità in esso (sto inviando convertito in un iPhone tramite un'API). – mootymoots

+0

Sì, ho capito; non è questo il problema Ho fornito una risposta. – BoltClock

+0

Senza parametri, converte solo < > & indietro. – mario

risposta

31

&#8211; mappe per un carattere UTF-8 (il trattino em) quindi è necessario specificare UTF-8 come la codifica dei caratteri:

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

Ricevo ancora l'entità quando visualizzo la fonte su quello ...? – mootymoots

+0

@mootymoots: l'ho testato, ho ottenuto il carattere grezzo invece dell'entità. Mi chiedo che altro potrebbe causarlo ... forse la codifica del documento HTML? – BoltClock

+0

è convertito nella pagina - ma non nella fonte ...? Guardando in chrome – mootymoots

4

Provare a utilizzare 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; 
?> 

Questo dovrebbe funzionare E dovrebbe essere convertito anche nella fonte