English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Soluzione al problema di caratteri cinese sbagliati durante la salvataggio XML con DOMDocument in PHP

In PHP, DOMDocument per le operazioni xml non c'è problema se usiamo caratteri inglesi, ma se usiamo caratteri cinesi ci sono problemi di codice sbagliato, di seguito vi presentiamo alcune soluzioni a questo problema.

L'interno del DOM di PHP è un meccanismo utf8, durante il caricamento di HTML, l'encoding viene impostato tramite la verifica del charset nei meta dei caratteri, se non c'è charset, viene trattato come iso8859, e in questo caso, durante il salvataggio di saveXML, l'output è utf8, quindi vediamo il codice sbagliato.

Non è chiaro ancora? Facciamo un esempio:

$xml = new DOMDocument();
@$xml->loadHTML('<div>Io sono un test per vedere</div>'); 
$dom = new DOMXPath($xml);
echo $dom->query('//div')->item(0)->saveXML();

Esegui la pagina web, noterai che l'output è in codifica sbagliata, come risolvere questo problema? Ci sono due modi.

Primo metodo: specificare l'encoding durante loadHTML, il seguente codice è tratto dal回复 della documentazione ufficiale di php.net, il codice è il seguente:

$doc = new DOMDocument();
$doc->loadHTML('<?xml encoding="UTF-8">' . $html);
foreach ($doc->childNodes as $item)
{
if ($item->nodeType == XML_PI_NODE)
{
$doc->removeChild($item); // rimuovere hack
}
}
$doc->encoding = 'UTF-8'; // inserire la codifica corretta

Secondo metodo: ricodifica dei caratteri di output tramite iconv, il codice è il seguente:

echo iconv("UTF-8", "GB18030//TRANSLIT", $dom->saveXML($n));

Quello che ho descritto sopra è la soluzione al problema di codifica sbagliata dei caratteri cinesi quando si salva xml con DOMDocument in PHP che vi ho presentato. Spero che sia utile a tutti voi. Se avete qualsiasi domanda, lasciate un commento e vi risponderò prontamente. In questo senso, anche grazie per il supporto al sito web Yellowscream tutorial!

Ti potrebbe interessare