IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   XML, использование недопустимого символа в строке (http://www.imho.ws/showthread.php?t=113294)

Vader 05.01.2007 13:53

XML, использование недопустимого символа в строке
 
Добрый день!
Есть XML-файл, представляет собой конфигурационный файл, в нем есть параметр
<user name="Шагин О.В." login="O_Shagin" password="347f3<:[6y" group="default">
Так вот парсер ругается на использование недопустимого символа "<" в значении пароля!
Как же прочесть этот файл?
Заранее спасибо!

ЕЖ 05.01.2007 19:16

Ну либо заменять символ "<" на &lt; либо что-то придумать со стандартной для XML секцией <![CDATA[...]]> для размещения множества таких вот зарезервированных символов.

BorLase 05.01.2007 20:24

тут однозначно надо CDATA использовать - с хеше что угодно может появиться - и <, и & - да мало ли что там сгенерится :)

PSyton 06.01.2007 10:09

Досттаточно просто заменять на лету "запрещенные" в XML символы на их аналоги (&...) при записи и обратно при чтении.
Символов там не больше 5 штук разных.

Borland 06.01.2007 13:49

Можно сделать ещё правильнее: хранить всё содержимое поля в кодированном/шифрованном виде. Например, использовать кодировку MIME.
При этом получаем бонус - даже если файл попадёт в руки кому не следует, не каждый ламер прочитает пароль. А если систему кодирования/декодирования придумать самому или хотя бы модифицировать...

Vader 10.01.2007 09:49

Спасибо за советы!
Уточню обстоятельства - файл создает сторонняя софтина, мне его надо только прочесть, поэтому я не могу влиять на методологию его формирования. Кстати, если это имеет значение, файл в юникоде.
Как же его разобрать без переделки?

BorLase 10.01.2007 15:16

тогда плохо

Или надо катать баг-репорт на софтину, или извращаться, пытаясь обойти этот баг. Потому что это ошибка разработчика. Просто не до тестировали до конца - на некоторых паролях наверняка все ок, а некоторые дают такие вот побочные эффекты.

Тот XML, что ты привел - это не well-formed-XML, а простой текстовый файл (если быть формально точным). Для его обработки XML-функции неприменимы - надо парсить руками :(

Vader 11.01.2007 09:10

Мда, этого я и боялся...
А существуют в природе альтернативные парсеры кроме MS? Может есть такой, кот. понимает что значение в "" может содержать любые символы....

BorLase 11.01.2007 12:24

сомневаюсь :)

по той простой причине, что по стандарту, в "" НЕ МОГУТ быть символы < и & - соответственно, вряд ли в природе есть парсеры, которые будут читать неправильный XML.

в твоем конкретном случае (раз нельзя поправить исходный баг) - мне лично видится только одно решение - перед парсингом заменять все символы в кавычках. Возможно, гуру подскажут правильный регэксп (я в них не силен, сорри)

crawler 11.01.2007 16:09

а что, в пароле не может быть двойной кавычки ?
допустим кто-то такой умный как я сделал себе пароль
Цитата:

12" group=
, как тогда будет выглядеть ХМЛ ?
Цитата:

<user name="Шагин О.В." login="O_Shagin" password="12" group=" group="default">
и какой парсер сможет отпарсить такое чудо?
Производителю "сторонней софтины" бить по ушам, пока не сделает патч.

BorLase 11.01.2007 17:57

тогда должно быть
Цитата:

12&quot; group=
т.е.
Цитата:

<user name="Шагин О.В." login="O_Shagin" password="12&quot; group=" group="default">
то, что производителю надо бить по ушам - 100% согласен - это его баг.

Vader 15.01.2007 09:09

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

BorLase 15.01.2007 21:31

похоже, тут был не парсер, а просто

print('<user name="$name" login="$login" password="$pass" group="$group">');

или что-то в этом роде :)


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

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.