![]() |
XML, использование недопустимого символа в строке
Добрый день!
Есть XML-файл, представляет собой конфигурационный файл, в нем есть параметр <user name="Шагин О.В." login="O_Shagin" password="347f3<:[6y" group="default"> Так вот парсер ругается на использование недопустимого символа "<" в значении пароля! Как же прочесть этот файл? Заранее спасибо! |
Ну либо заменять символ "<" на < либо что-то придумать со стандартной для XML секцией <![CDATA[...]]> для размещения множества таких вот зарезервированных символов.
|
тут однозначно надо CDATA использовать - с хеше что угодно может появиться - и <, и & - да мало ли что там сгенерится :)
|
Досттаточно просто заменять на лету "запрещенные" в XML символы на их аналоги (&...) при записи и обратно при чтении.
Символов там не больше 5 штук разных. |
Можно сделать ещё правильнее: хранить всё содержимое поля в кодированном/шифрованном виде. Например, использовать кодировку MIME.
При этом получаем бонус - даже если файл попадёт в руки кому не следует, не каждый ламер прочитает пароль. А если систему кодирования/декодирования придумать самому или хотя бы модифицировать... |
Спасибо за советы!
Уточню обстоятельства - файл создает сторонняя софтина, мне его надо только прочесть, поэтому я не могу влиять на методологию его формирования. Кстати, если это имеет значение, файл в юникоде. Как же его разобрать без переделки? |
тогда плохо
Или надо катать баг-репорт на софтину, или извращаться, пытаясь обойти этот баг. Потому что это ошибка разработчика. Просто не до тестировали до конца - на некоторых паролях наверняка все ок, а некоторые дают такие вот побочные эффекты. Тот XML, что ты привел - это не well-formed-XML, а простой текстовый файл (если быть формально точным). Для его обработки XML-функции неприменимы - надо парсить руками :( |
Мда, этого я и боялся...
А существуют в природе альтернативные парсеры кроме MS? Может есть такой, кот. понимает что значение в "" может содержать любые символы.... |
сомневаюсь :)
по той простой причине, что по стандарту, в "" НЕ МОГУТ быть символы < и & - соответственно, вряд ли в природе есть парсеры, которые будут читать неправильный XML. в твоем конкретном случае (раз нельзя поправить исходный баг) - мне лично видится только одно решение - перед парсингом заменять все символы в кавычках. Возможно, гуру подскажут правильный регэксп (я в них не силен, сорри) |
а что, в пароле не может быть двойной кавычки ?
допустим кто-то такой умный как я сделал себе пароль Цитата:
Цитата:
Производителю "сторонней софтины" бить по ушам, пока не сделает патч. |
тогда должно быть
Цитата:
Цитата:
|
По идее, если писать в файл парсером, то он сам будет заменять непотребные символы, а при чтении восстанавливать. В моем случае похоже что девелоперы написали свой парсер или юзают какой-то альтернативный.
|
похоже, тут был не парсер, а просто
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.