slite
Новичок
День добрый всем, уважаемые пользователи форума.
Возникла опять таки ситуация в котором я обращяюсь к вам.
Есть функция которая переводит xml в массив. По правде я его в инете нашел.
Функция работает. Но перестает возвращять массив когда в xml которая в кодировке cp1251 находяться несколько символов в utf-8.
Пример: Это не оригинал запроса, но примерно так он выглядит.
Может кто то знает, как можно решить эту ситуацию
Возникла опять таки ситуация в котором я обращяюсь к вам.
Есть функция которая переводит xml в массив. По правде я его в инете нашел.
PHP:
function xml_to_array($XML){
$XML = trim($XML);
$returnVal = $XML;
// Expand empty tags
$emptyTag = '<(.*)/>';
$fullTag = '<\\1></\\1>';
$XML = preg_replace ("|$emptyTag|", $fullTag, $XML);
$matches = array();
if (preg_match_all('|<(.*)>(.*)</\\1>|Ums', trim($XML), $matches))
{
// Если есть элементы, тогда вернуть массив, иначе текст
if (count($matches[1]) > 0) $returnVal = array();
foreach ($matches[1] as $index => $outerXML)
{
$attribute = $outerXML;
$value = $this->xml_to_array($matches[2][$index]);
if (! isset($returnVal[$attribute])) $returnVal[$attribute] = array();
$returnVal[$attribute][] = $value;
}
}
// Bring un-indexed singular arrays to a non-array value.
if (is_array($returnVal)) foreach ($returnVal as $key => $value)
{
if (is_array($value) && count($value) == 1 && key($value) === 0)
{
$returnVal[$key] = $returnVal[$key][0];
}
}
return $returnVal;
Пример: Это не оригинал запроса, но примерно так он выглядит.
PHP:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope >
<SOAP-ENV:Body>
<ns1:XML>
<item>
<name>txn_date</name>
<value>20141128121613</value>
</item>
<item>
<name>type</name>
<value>ТУт скажем что то в UTF-8</value>
</item>
</details>
</ns1:XML>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>