Лучше ли избегать символов, таких как кавычки при чтении из базы данных или во время записи? - PullRequest
0 голосов
/ 02 июня 2018

Я не смог найти хорошего ответа на эту тему, но это, должно быть, обычный вопрос.Многие приложения в настоящее время просто извлекают данные из базы данных и из нее и выводят либо JSON, либо XML напрямую на внешний клиент.Итак, в какой момент процесса лучше всего избегать проблемных символов, таких как " или <?

Если вы выведите имя Dwayne "The Rock" Johnson в JSON, вы получите:

{"name":"Dwayne "The Rock" Johnson"} //breaks

.., что нарушит JSON, и ваше приложение упадет, поэтому его необходимо вывести в виде:

{"name":"Dwayne \"The Rock\" Johnson"} //ok

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

$name =~ s/"/\\"/g; #replaces " with \"

Мой вопрос заключается в том, что, хотя я уверен, что это плохая практика - постоянно изменять ваши данные, чтобы избежать любых проблемных символов, конечнотакже плохая практика - использовать слишком много ресурсов сервера, делая постоянные замены символов при каждом чтении из базы данных, когда это можно было сделать только один раз?Как вы подходите к этому вопросу?

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Вы имеете в виду, что вы храните в базе данных значения отдельных атрибутов объекта, которые впоследствии должны быть представлены в виде JSON или XML?Если да, лучше сохранить исходные простые значения и экранировать только при генерации JSON или XML.В противном случае это нарушит или существенно усложнит другие операции, такие как поиск и индексация.Кроме того, если у вас более поздний формат, который не требует экранирования (например, HTML), вам необходимо удалить экранирование.

Вкратце: сохраняйте простой текст.Избегайте специальных символов после чтения перед созданием JSON или XML.

0 голосов
/ 02 июня 2018

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


Отдельно: не создавайте JSON вручную.Используйте сериализатор (который будет обрабатывать кавычки для вас).

...