Как я говорю DOMDocument-> загрузка (), какое кодирование я хочу, чтобы это использовало?

Я чувствую, что необходимо использовать их максимально часто, но я действительно согласовываю это t & s представляют объекты лучше, чем & b.

Это сводится к, как все остальное, предпочтения. Мне нравится этот, можно зависеть от хранимых процедур в соответствии с теми же конвенциями, когда каждый разработчик использует псевдоним таким же образом.

Идут, убеждают Ваших коллег входить в ту же страницу как Вы, или это все бесполезно. Альтернатива - Вы, мог иметь таблицу Zebra так первая таблица и исказить его, как a. Это просто было бы милым.

11
задан Charles 23 December 2012 в 21:40
поделиться

2 ответа

Это работает для вас?

$doc = new DOMDocument('1.0', 'iso-8859-1');
$doc->load($xmlPath);

Изменить: Поскольку кажется, что это не работает, то, что вы могли бы сделать вместо этого, похоже на ваш существующий метод, но без временного файла . Прочтите XML-файл из исходного кода, просто используя стандартные операции ввода-вывода ( file_get_contents () или что-то в этом роде), затем внесите любые изменения в нужную вам кодировку ( iconv () или utf8_decode () ), а затем используйте loadXML ()

$myXMLString = file_get_contents($xmlPath);
$myXMLString = utf8_decode($myXMLString);
$doc = new DOMDocument('1.0', 'iso-8859-1');
$doc->loadXML($myXMLString);
9
ответ дан 3 December 2019 в 07:38
поделиться

Я не нашел способа установить кодировку по умолчанию (пока), но возможно в этом случае возможен режим восстановления.
Когда libxml обнаруживает ошибку кодирования и кодировка не была явно задана, она переключается с unicode / utf8 на latin1 и продолжает синтаксический анализ документа. Но в контексте синтаксического анализатора свойство wellFformed установлено в 0 / false. Расширение DOM PHP считает документ действительным, если wellFformed истинно или атрибут объекта DOMDocument Recovery истинен.

<?php
// german Umlaut ä in latin1 = 0xE4
$xml = '<foo>'.chr(0xE4).'</foo>';

$doc = new DOMDocument;
$b = $doc->loadxml($xml);
echo 'with doc->recover=false(default) : ', ($b) ? 'success':'failed', "\n";

$doc = new DOMDocument;
$doc->recover = true;
$b = $doc->loadxml($xml);
echo 'with doc->recover=true : ', ($b) ? 'success':'failed', "\n";

печатает

Warning: DOMDocument::loadXML(): Input is not proper UTF-8, indicate encoding !
Bytes: 0xE4 0x3C 0x2F 0x66 in Entity, line: 1 in test.php on line 6
with doc->recover=false(default) : failed

Warning: DOMDocument::loadXML(): Input is not proper UTF-8, indicate encoding !
Bytes: 0xE4 0x3C 0x2F 0x66 in Entity, line: 1 in  test.php on line 11
with doc->recover=true : success

Вы по-прежнему получаете предупреждающее сообщение (которое можно подавить с помощью @ $ doc-> load ()), а также оно будет отображаться во внутренних ошибках libxml (только один раз, когда парсер переключается с utf8 на latin1). Код ошибки для этой конкретной ошибки будет 9 (XML_ERR_INVALID_CHAR).

<?php
$xml = sprintf('<foo>
    <ae>%s</ae>
    <oe>%s</oe>
    &
</foo>', chr(0xE4),chr(0xF6));

libxml_use_internal_errors(true);
$doc = new DOMDocument;
$doc->recover = true;
libxml_clear_errors();
$b = $doc->loadxml($xml);
$invalidCharFound = false;
foreach(libxml_get_errors() as $error) {
    if ( 9==$error->code && !$invalidCharFound ) {
        $invalidCharFound = true;
        echo "found invalid char, possibly harmless\n";
    }
    else {
        echo "hm, that's probably more severe: ", $error->message, "\n";
    }
}
5
ответ дан 3 December 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: