5

Sto sviluppando un CMS per un cliente e ha bisogno di modificare materiale e utilizzare caratteri speciali come ç e ®. Tuttavia, non voglio che debba inserire i codici dei caratteri come ®. Qualcuno sa un buon modo per convertire automaticamente quei personaggi usando PHP?Convertire caratteri speciali in codici carattere HTML

+4

Err. Assicurati che la codifica dei caratteri sia coerente (ad esempio, usa UTF-8 in tutto) e non è necessario convertire quei caratteri in modo che vengano visualizzati perfettamente. – Quentin

risposta

14

È possibile utilizzare htmlentities() per farlo.

php -r 'echo htmlentities("®ç", ENT_COMPAT, "UTF-8"), "\n";' 
®ç 

Per attivare entità torna al testo leggibile, utilizzare html_entity_decode():

php -r 'echo html_entity_decode("®ç", ENT_COMPAT, "UTF-8"), "\n";' 
®ç 

Se non si utilizza unicode, omettere il nome charset o dare il set di caratteri corretto.

+1

+1 per specificare la codifica. –

+0

Risposta fantastica che risolve un problema con cui ho discusso per alcuni anni. Vale la pena notare che alcune delle altre risposte che menzionano l'incollatura o l'hard coding della versione del KeyCode ALT del simbolo non funzioneranno quando si sposta il codice dal sistema operativo al sistema operativo. –

2

Usa unicode, e fargli vedere come copiare & incolla da mappa caratteri :-)

+4

-1. Che tipo di risposta è questa? –

+3

@Alin Non è * che * una cattiva risposta, direi - se il client utilizza già caratteri come ç e ®, quindi utilizzando UTF-8, ad esempio, per l'input, l'archiviazione e l'output del CMS consentiranno per eliminare la necessità delle entità HTML. Ad esempio, proprio come succede su questa pagina web, dove ho appena scritto "®", inviato al sito e visualizzato sul sito come "®", cerca il codice sorgente per questa pagina e hai vinto vediamo un'entità HTML lì, solo il vero personaggio reale. –

+0

@MattGibson Un problema è se si utilizza il controllo del codice sorgente e si sposta il codice avanti e indietro tra sistemi operativi basati su Unix e sistemi operativi Windows. Ho imparato a memoria che i codici tasto ALT non funzionano nel modo in cui li si desidera attraverso i sistemi operativi. –

3

Il modo più semplice sarebbe quella di utilizzare UTF-8 fin dal inizio.
Ma si può anche convertire automaticamente i caratteri con DOM:

$dom = new DOMDocument; 
$dom->appendChild(new DOMText('© oui içi » ')); 
echo $dom->saveHtml(); 

uscite

© oui içi » 
0

Dai un'occhiata alla funzione htmlentities. Questo prende una stringa e converte i caratteri del componente nelle loro entità HTML. È possibile specificare la codifica della stringa per essere coerente con l'input dell'utente.

+0

Grazie! Funziona :) –