2013-03-09 9 views
6

Voglio solo convertire i caratteri non codificati in entità html, senza influire sulle entità che sono già presenti. Ho una stringa che ha già codificato entità, ad es .:htmlentities() Entità di doppia codifica nella stringa

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

Quando uso htmlentities(), il & all'inizio di entità viene codificato di nuovo. Questo significa ‐ e altre entità hanno il loro & codificato &:

× 

Ho provato decodifica la stringa completa, quindi la codifica di nuovo, ma non sembra funzionare correttamente. Questo è il codice che ho provato:

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'); 

Ma non sembra funzionare nel modo giusto. C'è un modo per prevenire o impedire che ciò accada?

risposta

6

Impostare la variabile $double_encode su false. Vedere lo documentation per ulteriori informazioni.

Il codice risultante dovrebbe essere simile:

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

Hai fatto bene a guardare il documentation, ma vi siete persi la parte migliore. Può essere difficile da decifrare questo a volte:

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

Guardate la fine.

Lo so. Confusione. Di solito ignoro la linea della firma e vado direttamente al blocco successivo (Parameters) per i blurb su ogni argomento.

modo che si desidera utilizzare l'argomento double_encoded alla fine per dire htmlentities non ricodificare (e probabilmente vuole attaccare con UTF-8 meno che non abbiate un motivo specifico di non):

$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

Problemi correlati