2

リモートの場所から XML ソースを読み込もうとしているので、フォーマットを制御できません。残念ながら、読み込もうとしている XML ファイルにはエンコードがありません。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <NODE> </NODE> </ROOT>

次のようなものを試すとき:

$doc = new DOMDocument( );
$doc->load(URI);

私は得る:

Input is not proper UTF-8, indicate encoding ! Bytes: 0xA3 0x38 0x2C 0x38

これを抑制する方法を検討しましたが、うまくいきませんでした。DOMDocument で使用できるようにするには、これをどのようにロードすればよいですか?

4

4 に答える 4

2

ドキュメントを UTF-8 に変換する必要があります。最も簡単なのはutf8_encode()を使用することです。

DOM ドキュメントの例:

$doc = new DOMDocument();
$content = utf8_encode(file_get_contents($url));
$doc->loadXML($content);

SimpleXML の例:

$xmlInput = simplexml_load_string(utf8_encode(file_get_contents($url_or_file)));

現在のエンコーディングがわからない場合は、次のようにmb_detect_encoding()を使用します。

$content = utf8_encode(file_get_contents($url_or_file));
$encoding = mb_detect_encoding($content);
$doc = new DOMdocument();
$res = $doc->loadXML("<?xml encoding='$encoding'>" . $content);

ノート:

  • エンコーディングが検出できない場合 (関数は FALSE を返します)、utf8_encode()を介してエンコーディングを強制してみてください。
  • 代わりにHTML コードを読み込んでいる場合$doc->loadHTMLでも、XML ヘッダーを使用できます。

エンコーディングがわかっている場合は、iconv()を使用して変換します。

$xml = iconv('ISO-8859-1' ,'UTF-8', $xmlInput)
于 2015-03-19T22:59:18.643 に答える
1

ドキュメントを編集 (「前処理」) して、XML 宣言を追加する際に配信されるエンコーディングを指定できます。もちろん、それが何であるかは、自分で確認する必要があります。DOM オブジェクトはそれを解析する必要があります。

XML 宣言の例:

<?xml version="1.0" encoding="UTF-8" ?>
于 2009-08-30T16:48:42.280 に答える
0

代わりにXMLReaderクラスを使用してみることができます。XMLReader は XML 専用に設計されており、使用するエンコーディングのオプションがあります (なしの場合は「null」を含む)。

于 2009-08-30T16:47:14.763 に答える
-1

私は同様の状況に遭遇しました。UTF-8 でエンコードされているはずの XML ファイルを取得していましたが、不適切な ISO 文字が含まれていました。

悪い文字をUTF-8にエンコードする次のコードを書きました

<?php

# The XML file with bad characters
$filename = "sample_xml_file.xml";

# Read file contents to a variable
$contents = file_get_contents($filename);

# Find the bad characters
preg_match_all('/[^(\x20-\x7F)]*/', $contents, $badchars);

# Process bad characters if some were found
if(isset($badchars[0]))
{
        # Narrow down the results to uniques only
        $badchars[0] = array_unique($badchars[0]);

        # Replace the bad characters with their UTF8 equivalents
        foreach($badchars[0] as $badchar)
        {
                $contents = preg_replace("/".$badchar."/", utf8_encode($badchar), $contents);
        }
}

# Write the fixed contents back to the file
file_put_contents($filename, $contents);

# Cleanup
unset($contents);

# Now the bad characters have been encoded to UTF8
# It will now load file with DOMDocument
$dom = new DOMDocument();
$dom->load($filename);

?>

ソリューションについて詳しくは、http: //dev.strategystar.net/2012/01/convert-bad-characters-to-utf-8-in-an-xml-file-with-php/に投稿しました。

于 2012-01-12T20:37:17.700 に答える