[РЕШЕНО] Проблема preg_match_all.

slite

Новичок
День добрый всем, уважаемые пользователи форума.
Возникла опять таки ситуация в котором я обращяюсь к вам.

Есть функция которая переводит 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;
Функция работает. Но перестает возвращять массив когда в xml которая в кодировке cp1251 находяться несколько символов в utf-8.

Пример: Это не оригинал запроса, но примерно так он выглядит.
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>
Может кто то знает, как можно решить эту ситуацию
 

slite

Новичок
как оказалось дело не в кодировке.
Для выяснения попробовал каждый раз добавлять по тегу. И стало ясно что скрипт перестает обрабатывать xml после достижения определенного размера.

В связи с этим вопрос, как в этом скрипте обойти проблему с размером xml?
 

Фанат

oncle terrible
Команда форума
Это единственная функция, которую ты смог найти в интернете?
 

slite

Новичок
как бы функции много. Прост я взял и по началу все вроде бы подходило. а щяс я написал куча всего которая зависит от этой функции :(
Так же кажись я понял в чем проблема. Функция не принимает значение которая больше 255 так как тип данных string

как быть?
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
чет не первый раз вижу, как люди soap парсят, а зачем не понимаю!
 
Сверху