#html #asp.net #xml #decode #encode
Вопрос:
Сегодня кто-то отправил XML-файл на мой asp.net 4.8 серверное приложение, подобное этому:
<person>
<name>example1 amp;amp;#38 example2</name>
</person>
Серверное приложение считывает значение узла и сохраняет его в dbo столбца базы данных sql.Человек.Имя без какой-либо расшифровки. первый дубт: это плохо ? как следует хранить ? Сначала его следует расшифровать.
В любом случае, предполагая, что значение будет сохранено как есть, рано или поздно часть приложения на стороне клиента запросит данные с сервера, и эта строка будет отправлена клиенту и показана правильно, поскольку это строка в кодировке html.
Проблема, с которой я имею дело, — это исключение проверки, возникающее, когда клиент возвращает эти данные в запросе post серверу.
Простая причина должна заключаться в том, чтобы заменить/избежать «amp;#38», содержащегося в теле сообщения.
Это лучший способ справиться с этим ? Как следует передавать данные между сервером и клиентом ?
Комментарии:
1. Если бы у меня была колонка под названием «dbo.Person.Name» Я бы не ожидал, что это будет содержать какой-либо XML. Он должен содержать только исходное имя человека. Почему вы хотите хранить XML там?
2. Сначала я подумал, сохраните его как есть. amp;amp;#38; — это шестнадцатеричный код для»amp;», но поскольку символ «amp;» идентифицирует сущность символа, он правильно экранирован для синтаксического анализатора XML (не человека) для чтения. Затем я понял, что вам не хватает завершающей точки «;» с запятой, и я думаю, что в браузере появится «amp;38″. Похоже, кто-то написал свой собственный синтаксический анализатор XML и неправильно удалил»amp;», что обычно означает просто «amp;amp;»
3. мейсон, я храню не xml, а только внутреннее значение узла xml «имя»
4. Если данные, которые вы храните в базе данных, не предназначены для XML, то зачем вам их кодировать так, как если бы это было так?
5. Уильям Уолсет, вы были правы насчет пропавшего персонажа. В любом случае, он был сохранен как amp;#38 в базе данных… Со стороны клиента я нашел эту функцию для вызова перед отправкой данных обратно на сервер, и она, похоже, работает $(«<textarea/>»).html(this.name).текст() — как вы думаете, может быть правильным решением ?
Ответ №1:
«Сегодня кто — то отправил XML»
Вернитесь к ним и спросите их, почему они отправляют такие грязные данные, и скажите им, что вы не готовы вносить такие данные в свою базу данных.
На первый взгляд это выглядит так, как будто amp;amp;#38
это совершенно неудачная попытка избежать амперсанда.
Комментарии:
1. Сэр, это окончательный ответ или есть способ подготовиться ? есть какие-нибудь советы ? Наверняка я понял, что xml сделан неправильно. Таким образом, единственный способ решить проблему, по-видимому, заключается в поиске этого шаблона и исправлении его перед сохранением в базе данных. Ты согласен ?
2. @Lluthus Почему ты спрашиваешь нас? Почему единственным способом было бы исправить XML? Почему бы вам просто не связаться с тем, кто отправил плохие данные, и не попросить их исправить это?
3. Я абсолютно НЕ согласен. Если кто-то посылает вам мешок муки, и в нем полно долгоносиков, вы не просеиваете его, чтобы удалить долгоносиков, вы отправляете его обратно, жалуетесь поставщику и/или находите другого поставщика. Вам прислали мусор; если они неправильно получают такие данные, то вы не можете доверять им как поставщику данных, и вы никоим образом не должны помещать эти данные в свою драгоценную базу данных.