Я чувствую, что необходимо использовать их максимально часто, но я действительно согласовываю это t & s представляют объекты лучше, чем & b.
Это сводится к, как все остальное, предпочтения. Мне нравится этот, можно зависеть от хранимых процедур в соответствии с теми же конвенциями, когда каждый разработчик использует псевдоним таким же образом.
Идут, убеждают Ваших коллег входить в ту же страницу как Вы, или это все бесполезно. Альтернатива - Вы, мог иметь таблицу Zebra так первая таблица и исказить его, как a. Это просто было бы милым.
Это работает для вас?
$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);
Я не нашел способа установить кодировку по умолчанию (пока), но возможно в этом случае возможен режим восстановления.
Когда 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";
}
}