Какая правильная кодировка / экранирование / htmlentities необходима при отправке данных из js в php, из php в mysql и для ответов REST json - PullRequest
4 голосов
/ 20 июля 2011

С этим я часто сталкиваюсь, и обычно я прибегаю к методу «попробуй и попробуй снова», пока данные не сработают. Я подумал, что SO будет знать, как лучше всего поддерживать данные, а не портить JSON.

Давайте предположим, что данные, которые я хочу отправить, являются текстовыми данными наиболее раздражающего вида - специальные символы, &, <, ", \ n, \ n \ r, \ t, + и т. Д. </p>

Давайте также предположим, что я хочу сохранить все в utf8, и моя таблица mysql настроена на utf8. Однако, поскольку в PHP отсутствует поддержка utf8, это следует учитывать.

Какую кодировку / экранирование / htmlentities я должен делать:

1) Отправка данных JSON от клиента JS в PHP через AJAX POST (что-то другое для GET?)

2) Декодирование данных в PHP и сохранение текстовой строки в базе данных mysql (или сохранение экранированных / закодированных данных?)

3) Извлечение данных из БД MySQL в PHP и возврат в виде ответа JSON на запрос JS AJAX

4) В ответе JSON от нашего REST API

Ответы [ 2 ]

5 голосов
/ 20 июля 2011

Всякий раз, когда я использую php / mysql / jquery для передачи данных туда и обратно, я заканчиваю тем, что использую следующую комбинацию кодировок / экранирований, и мне кажется, что это хорошо работает.

1) вам не нужно ничего делать здесь, ЕСЛИ вы не отправляете URL (я думаю, что это только для запросов GET) - но если вы отправляете URL, вам нужно использовать encodeURIComponent (url), который будет правильно экранировать символы & и специальные символы в URL-адресе (подробнее здесь ).

2) Используйте mysqli и связанные параметры, он сделает все экранирование за вас (читайте об этом здесь )

3) Я всегда использую это при выводе данных в файл HTML:

<?php
  htmlspecialchars($string_to_escape, ENT_QUOTES, 'UTF-8', false);
?>

Это будет правильно кодировать все специальные символы (false для "no double encoding"). Также убедитесь, что у вас есть правильные метатеги UTF-8 в верхней части HTML-страниц.

4) Использование json_encode всегда должно корректно экранировать ваши данные, но я бы использовал код из # 3 просто для уверенности. Но, вероятно, он понадобится вам, только если вы возвращаете данные со специальными символами.

0 голосов
/ 20 июля 2011
  1. для отправки данных json в php вам не нужно делать ничего особенного.JSON - это просто сериализованная переменная javascript
  2. , используйте готовые операторы!не пытайтесь декодировать / вырезать / изменять содержимое с помощью php
  3. , используйте соответствующие функции для экранирования данных для json (я не знаю, есть ли для этого встроенная функция php)
  4. то же самоекак 3.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...