Это то, с чем я часто сталкиваюсь, и обычно я возвращаюсь к методу try и try again, пока данные не будут работать. Я понял, что SO будет знать, что лучше всего подходит для поддержания данных и не испортить json.
Предположим, что данные, которые я хочу отправить, – это текстовые данные наиболее раздражающего вида – специальные символы, &, <, ", \ n, \ n \ r, \ t, + и т. Д.
Предположим также, что я хочу сохранить все в utf8, а моя таблица mysql настроена на utf8. Однако, поскольку поддержка utf8 PHP отсутствует, это следует учитывать.
Какую кодировку / экранирование / htmlentities следует делать из:
1) Отправка данных JSON от клиента JS на PHP через AJAX POST (что-то другое для GET?)
2) Декодирование данных в PHP и сохранение текстовой строки в базе данных mysql (или сохранение экранированных / закодированных данных?)
3) Получение данных из базы данных MySQL в PHP и возвращение в виде ответа JSON на запрос JS AJAX
4) В ответе JSON от нашего REST api
Всякий раз, когда я использую 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 для «без двойной кодировки»). Также убедитесь, что у вас есть соответствующие метатеги UTF-8 в верхней части ваших html-страниц.
4) Использование json_encode должно всегда корректно удалять ваши данные, но я бы использовал код из # 3, чтобы убедиться. Но вам, вероятно, понадобится только это, если вы возвращаете данные со специальными символами.