0

コメントをDisqusにエクスポートするスクリプトを作成しようとしています。そのためには、巨大なXMLファイルを作成する必要があります。

UTF 8でのエンコードに問題があります。ファイルはUTF-8であると思われますが、スペイン語の要素を正しく表示するには、utf8_decodeを作成する必要があります。

生成されるファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:dsq="http://www.disqus.com/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:wp="http://wordpress.org/export/1.0/"
>
<channel>
    <wp:comment>
        <wp:comment_id>26</wp:comment_id>
        <wp:comment_author>KA_DIE</wp:comment_author>
        <wp:comment_author_email> </wp:comment_author_email>
        <wp:comment_author_url></wp:comment_author_url>
        <wp:comment_author_IP> </wp:comment_author_IP>
        <wp:comment_date_gmt>2009-07-16 18:53:19</wp:comment_date_gmt>
        <wp:comment_content><![CDATA[WTF TEH Gladios en español <br />tnx tnx <br />me usta mucho esa web estoy pendiente mucho se su actualziacion es buen saber ke esta en español <br />x que solo entendia el 80, 90% de la paguina jiji]]></wp:comment_content>
        <wp:comment_approved>1</wp:comment_approved>
        <wp:comment_parent>0</wp:comment_parent>
    </wp:comment>
</channel>
</rss>

IPやメールなどのセキュリティ上の理由でデータを削除しました。ご覧のとおり、「ñ」の文字が含まれています。しかし、示されているXMLはエラーをスローします。

XML読み取りエラー:構成が正しくありません

正確な翻訳はわかりませんが、コンテンツ行でクラッシュします。コードは次のように生成されます。

public function generateXmlElement (){
            $xml = "<wp:comment>
                        <wp:comment_id>$this->id</wp:comment_id>
                        <wp:comment_author>$this->author</wp:comment_author>
                        <wp:comment_author_email>$this->author_email</wp:comment_author_email>
                        <wp:comment_author_url>$this->author_url</wp:comment_author_url>
                        <wp:comment_author_IP>$this->author_ip</wp:comment_author_IP>
                        <wp:comment_date_gmt>$this->date</wp:comment_date_gmt>
                        <wp:comment_content><![CDATA[$this->content]]></wp:comment_content>
                        <wp:comment_approved>$this->approved</wp:comment_approved>
                        <wp:comment_parent>0</wp:comment_parent>
            </wp:comment>";
            return $xml;
        }

そして、ファイルにfwriteします。

何が問題なのか知っていますか?

4

2 に答える 2

1

問題は、XML が UTF-8 でエンコードされていない可能性が最も高いですが、実際には別のもの (ISO-8859-1?) です。文字 'ñ' (U+00F1) は、UTF-8 で 2 オクテット 0xC3B1 としてエンコードされます。Windows 1252 コード ページと ISO-8859 エンコーディングの両方で、「ñ」は単一のオクテット 0xF1 です。

XML ファイルの先頭に Unicode BOM (U+FEFF) がありますか? BOM が存在する場合は、エンコーディングとバイト順を示します。

  • 0xEFBBBF: UTF-8. バイト順は重要ではありません。
  • UTF-16 と UTF-32 ではバイト順が重要です。
    • 0xFFFE: UTF-16、リトルエンディアン
    • 0xFEFF: (ビッグエンディアン)
    • 0xFFFE0000: UTF-32、リトルエンディアン
    • 0x0000FEFF: UTF-32、ビッグエンディアン

XML 標準では、BOM が存在せず、エンコードを示す XML 宣言が存在しない場合、ドキュメントはデフォルトでエンコードされた UTF-8 として解釈されると規定されています。BOM (存在する場合) と XML 宣言で指定されたエンコーディングの間に不一致がある場合に何が起こるかについては、あいまいなままになっていると思います。

ファイルの XML 宣言が正しくない可能性があります (たとえば、XML 宣言は ではなくUTF-8、 のように記述する必要がありますISO-8859-1

于 2011-05-06T18:43:00.030 に答える
0

XML を生成するには、適切な XML ライブラリを使用する必要があります。LibXML2 は PHP にバンドルされており、PHP の DOM APIからアクセスできます。これにより、特にエンコーディングの問題が処理されます。このようなものによくあることですが、これは事前学習への投資であり、そのメリットはすぐにはわかりません。しかし、そこには利点があります。

于 2011-05-06T18:50:12.013 に答える