2012-06-26 9 views
5

Usando entrambe htmlspecialchars e htmlentities sta causando uscite vuote da elementi come un simbolo e anche singoli ' virgolette. Ovviamente, questo è assolutamente inutile, tuttavia l'output dei dati senza l'utilizzo di caratteri HTML restituisce questo simbolo per entrambi. Qualche ragione per cui ciò si verifica?htmlspecialchars l'output in bianco

qui è il codice che causa il problema:

<p> 
<?php 
    echo nl2br(htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT, "UTF-8")); 
?> 
</p> 
+2

Sembra un problema di charset. Sei sicuro che i tuoi dati siano codificati in UTF-8? –

+0

Potrei aver frainteso il tuo problema, ma l'ho provato su ideone.com e sembra funzionare bene: http://ideone.com/P298n –

+0

@ EmilVikström Come posso assicurarmi di questo? – JimmyBanks

risposta

13

Tale stringa non è codificato nella codifica UTF-8 valido. Potrebbe essere in un'altra codifica come UTF-16 o forse contiene solo alcuni file binari che non corrispondono a nessun formato.

La riga di fondo è che, poiché è stato specificato "UTF-8" come parametro del tipo di codifica di htmlspecialchars(), verrà restituita una stringa vuota se la stringa non è conforme a "UTF-8". Lo afferma nel PHP manual.

Una soluzione semplice consiste nell'utilizzare il flag sostitutivo o ignorato. Cambio:

htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT, "UTF-8") 

A:

htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT|ENT_SUBSTITUTE, "UTF-8") 

Oppure:

htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT|ENT_IGNORE, "UTF-8") 

Nota: ENT_IGNORE rimuove i byte non conformi. Ciò potrebbe causare a security issue. È meglio comprendere veramente il contenuto della stringa e come viene codificato. Correggere la fonte del problema piuttosto che utilizzare la semplice correzione ENT_IGNORE.

Dovresti chiederti perché la stringa non è codificato in UTF-8 ... è dovrebbe essere, ma non lo è.

Mi è capitato di aver appena riscontrato anche questo problema; puoi leggere i dettagli sul motivo per cui viene restituita una stringa vuota here.

+1

P.S. Suggerirei anche di modificare ENT_COMPAT in ENT_QUOTES, ma come sempre suppongo che dipenda dal tuo scenario specifico. – Lakey

+1

soluzione eccellente. – Centurion

+1

Questa risposta rende la mia giornata .. Grazie – emaniacs