2014-11-17 4 views
0

У меня возникли проблемы с отправкой и обработкой некоторых файлов с помощью пакета http_server Dart. Метод «processRequest» выдает исключение при обработке тела. Это исключение: Uncaught Ошибка: HttpException: Необработанное HTTP объект лексемаЯзык Dart и пакет http_server: Исключение при обработке символа «&»

Я звоню "ProcessRequest" следующим образом:

HttpBodyHandler.processRequest(request, defaultEncoding: Encoding.getByName("ISO-8859-1")).then((body) { 
     (...) 
    }, onError: _printError); 

Это исключение происходит как с ISO-8859-1 и UTF -8, только когда тело содержит символ «&». Есть ли способ исправить это?

ответ

0

Это оказалось ошибкой в ​​пакете Dart http_server. Мы пытаемся декодировать значения сущности HTML в значениях от multipart/form-post. Разбор HTML-объектов был неправильным и вызывал значения с & символами в них, чтобы они не работали.

Я сделал это исправление https://codereview.chromium.org/730203008, которое удалило синтаксический анализ объекта HTML для значений от multipart/form-post.

браузеров Chrome, Firefox и Safari могут использовать HTML-сущности (в виде & #xxxxx;. Для значений формы в некоторых случаях один случай, если атрибут accept-charset="latin1" установлен на элементе HTML form Однако в этом случае &. символы, введенные в ФОР не закодирован, поэтому общее декодирование не представляется возможным. исправление уже упоминалось выше удаляет автоматическое декодирование HTML сущности.

не установив accept-charset на form элемента приведет к UTF-8, которые будут использоваться, если Content-Type HTML-страницы, на которой размещена эта форма, - text/html; charset=utf-8. Использование всех UTF-8 обычно приводит к меньшему количеству проблем.

+0

sgjesse, ваш патч исправил проблему, и теперь я могу обработать тело, содержащее символ «&». Благодаря! – Felipe

+1

Ошибка исправлена ​​в версии 0.9.5 пакета http_server. – sgjesse