Как правильно сохранить узел значений XML, содержащий

#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. Я абсолютно НЕ согласен. Если кто-то посылает вам мешок муки, и в нем полно долгоносиков, вы не просеиваете его, чтобы удалить долгоносиков, вы отправляете его обратно, жалуетесь поставщику и/или находите другого поставщика. Вам прислали мусор; если они неправильно получают такие данные, то вы не можете доверять им как поставщику данных, и вы никоим образом не должны помещать эти данные в свою драгоценную базу данных.