Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   отправка XML в PHP (кириллица) (http://www.flasher.ru/forum/showthread.php?t=181965)

Вася Булочкин 07.07.2012 19:40

отправка XML в PHP (кириллица)
 
Мучаюсь уже которую неделю, нигде ответа найти не могу.
Есть:
XML, который формируется в FLASH:

xml_b:
Код:

<A name="Название 1">
<B name="Название 1.1">
</B>
</A>


Код AS1/AS2:

my_xml = new XML();
 
my_xml.onLoad = function(data){
    if(data==null){
        trace("Data was not send! Try again.");
    }else{
        trace(my_xml);
    }
}
xml_b.contentType = "text/xml";
xml_b.sendAndLoad("http://mysite/1.php", my_xml);

есть PHP:
PHP код:

<?php

$input 
file_get_contents("php://input");


$dom2 simplexml_load_string($input);



?>

Задача: отпарсить присылаемый XML в пхп
возникает проблема: либо не парсится, выдает ошибку:
"<b>Warning</b>: simplexml_load_string() [<a href="function.simplexml-load-string">function.simplexml-load-string</a>]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xC2 0xE2 0xE5 0xE4 in <b>/mysite/1.php</b> on line <b></b><br />
"
вроде Flash должен передавать UTF-8 по-умолчанию, хотя при $input=utf8_encode($input) все работает, но страдает кириллица. iconv не работает, никакой. При добавление к $input строчки "<?xml version="1.0" encoding="utf-8"?>", тоже не работает.

Как обработать XML с кириллицей в пхп, передаваемый через FLASH?

mooncar 07.07.2012 20:07

Любопытно.
Я бы еще попробовал класс LoadVars для передачи скрипту строки, представляющий собой XML.
Выложите тут комплект исходников, порезанных до минимально необходимых для воспроизведения проблемы.

Krusty 07.07.2012 20:35

Во-первых, имена вроде "Название 1.1"
не уверен, что поддерживаются.
во-вторых, все, что вы пишите в xml файл, должно быть пропущено через специальные функции, который кодируют спец-символы. Как вы создаете ваш xml документ?
в-третьих, как вы верно заметили, по умолчанию от xml-я ждут UTF-8, и, между прочим, по стандарту кодировку обязаны указывать. То, что у вас при utf8_encode все работает, но бьется, намекает на то, что у вас не uft-8 формируется, а исходная строка вообще черт-е в чем.

Добавлено через 2 минуты
И флеш-то с UTF-8 работает, но если вы начнете работать и вставите где-то кириллицу в win-1251, то она так и останется кириллицей в win-1251

Вася Булочкин 08.07.2012 04:33

Цитата:

во-вторых, все, что вы пишите в xml файл, должно быть пропущено через специальные функции, который кодируют спец-символы. Как вы создаете ваш xml документ?
в-третьих, как вы верно заметили, по умолчанию от xml-я ждут UTF-8, и, между прочим, по стандарту кодировку обязаны указывать. То, что у вас при utf8_encode все работает, но бьется, намекает на то, что у вас не uft-8 формируется, а исходная строка вообще черт-е в чем.
формируется во Flash, таким способом:
Код AS1/AS2:

n=_root.xml_b.createElement("A");
n.attributes.name="Название 1"
_root.xml_b.appendChild(n);

дочерние элементы образуются так же.
Если скажете, как во Flash указывать кодировку отправляемогого POST запроса, буду очень благодарен.
с удовольствием бы указал. пробывал таким же образом, как и создавал xml, но там тупо тэг. пробовал прилеплять уже в php: $input='"<?xml version="1.0" encoding="utf-8"?>'.$input, бесполезно. Перерыл гугл, но так и не узнал, как во Flash указывать кодировку. Узнал только то, что она по умолчанию UTF-8.

Цитата:

И флеш-то с UTF-8 работает, но если вы начнете работать и вставите где-то кириллицу в win-1251, то она так и останется кириллицей в win-1251
POST чистый, нигде не правился. Пробовал узнать, если не UTF-8, то что:
функцией, по моему, mb_detect_encoding...говорит толи UTF-8, толи Unicode. точно не помню. Пытался перевести, методом проб и ошибок, функциями iconv и mb_convert_encoding в UTF-8 с windows-1251, UTF-16, и с UTF-8 в UTF-8... Эффекта 0.
Исходники чистые, т.е. сокращены до минимума,эффект тот же:
Код AS1/AS2:

System.useCodepage = true;
var xml_b:XML = new XML();
n=_root.xml_b.createElement("A");
n.attributes.name="Название 1"
_root.xml_b.appendChild(n);
 
n=_root.xml_b.firstChild.createElement("B");
n.attributes.name="Название 1.1"
_root.xml_b.appendChild(n);
 
var my_xml = new XML();
 
my_xml.onLoad = function(data){
    if(data==null){
        trace("Data was not send! Try again.");
    }else{
        trace(my_xml);
    }
}
xml_b.contentType = "text/xml";
xml_b.sendAndLoad("http://mysite/1.php", my_xml);

System.useCodepage = true; и xml_b.contentType = "text/xml"; убирались, не на что не повлияли.
LoadVars сейчас попробую...

Krusty 08.07.2012 13:05

В пхп кодировки-больное место. забудьте навсегда mb_convert_encoding mb_detect_encoding и прочее от mbstring. Это все неправда, это никогда не работало толком. Это раз. Второе. Дампните пришедший результат в файл, и откройте его в редакторе, который умеет работать с различными представлениями, откройте его и смотрите.
Верьте simplexml_load_string() Entity: line 1: parser error : Input is not proper UTF-8
Если она считает, что это не UTF-8, значит, не оно. это три.
и четыре. не циклитесь на флеше, смотрите на серверную часть http://mysite/1.php там тоже полно потенциальных багов, начните с
PHP код:

setlocale(LC_ALL'en_US.UTF8''en_US.UTF-8'); 

и далее.


Часовой пояс GMT +4, время: 17:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.