PHP ile XSLT ile UTF-8 kodlama sorunu

0 Cevap php

PHP ile XSLT aracılığıyla XML dönüştürme zaman ben kötü bir kodlama sorunla karşı karşıya ediyorum.

Aşağıdaki gibi özetlenebilir sorun / dumbed olabilir: Ben bir XSLT stil ile (UTF-8 kodlanmış) XHTML dosyası, bazı karakterler yanlış görüntülenir kopyaladığınız zaman. Ben sadece aynı XHTML dosyayı göstermek zaman, tüm karakterler doğru çıkıyor.

Aşağıdaki dosyalar sorunu göstermektedir:

XHTML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>encoding test</title>
    </head>
    <body>
        <p>This is how we d&#239;&#223;&#960;&#955;&#509; &#145;special characters&#146;</p>
    </body>
</html>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:output method="xml" encoding="UTF-8"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

PHP

<?php
  $xml_file = 'encoding_test.xml';
  $xsl_file = 'encoding_test.xsl';

  $xml_doc = new DOMDocument('1.0', 'utf-8');
  $xml_doc->load($xml_file);

  $xsl_doc = new DOMDocument('1.0', 'utf-8');
  $xsl_doc->load($xsl_file);

  $xp = new XsltProcessor();
  $xp->importStylesheet($xsl_doc);

  // alllow to bypass XSLT transformation with bypass=true request parameter
  if ($bypass = $_GET['bypass']) {
    echo file_get_contents($xml_file);
  }
  else {
    echo $xp->transformToXML($xml_doc);
  }
?>

Bu komut olarak çağrıldığında böyle (yoluyla örneğin http://localhost/encoding_test/encoding_test.php), dönüştürülmüş XHTML belgedeki tüm karakterler dışında, dışarı Tamam gel ‘ ve ’ karakter kişiler (onlar açılış ve tek tırnak kapatıyoruz). Ben bir Unicode uzman değilim, ama iki şey beni grev:

  1. diğer tüm karakter kuruluşlar (&#145; UTF-8-lik ve &#146; hakkında bir şeyler ima olabilir) doğru olarak yorumlanır
  2. XHTML dosyası görüntülendiğinde henüz aracısız (via örneğin http://localhost/encoding_test/encoding_test.php?bypass=true), all karakterleri düzgün görüntülenir.

Ben her yerde elimden çıkışı için UTF-8 kodlamasını ilan ettik düşünüyorum. Başkaları belki yanlış görüyor musun ve doğruldu olabilir?

Şimdkimliken teşekkürler!

Ron Van den Branden

0 Cevap