Хорошо. Я запускаю публичный API JSONP, данные которого подаются с моего PHP-сервера. Я просто прочитал эту статью:
- JSON: подмножество JavaScript, которое не является (Магнусом Холмом, май 2011 г.)
(просьба ознакомиться с разъяснениями).
В принципе, если мои строки JSON содержат символ U + 2028 (разделитель строк Unicode) или символ U + 2029 (разделитель абзацев Unicode), то это совершенно верно JSON. Однако при использовании JSONP JSON запускается как JavaScript, и никакая строка в JavaScript не может содержать буквальный U + 2028 или U + 2029, так как он разрушит JavaScript. По-видимому, это обычно не проблема, если вы используете правильный парсер JSON, но в случае JSONP браузер является парсером JSON.
По сути, если эти символы были внутри строк в моих JSONP-данных, отправляемых клиенту, это бы выбросило строку или абзац в строку, которая нарушила бы JavaScript и прекратила его выполнение. Это возможность, поскольку API отправляет обратно некоторые данные, введенные клиентом. Кто-то может потенциально ввести U + 2028 или U + 2029 в базу данных, поэтому, когда я отправлю это обратно как JSONP, он разрушит любую реализацию, используя мой API.
Итак, мой вопрос: на PHP, как я могу дезинфицировать/выводить данные JSON для удаления или удаления символов U + 2028 и U + 2029 перед отправкой его клиенту?
В настоящее время мой процесс выполняет json_encode в массиве данных и передает эти данные клиенту. Должен ли я избегать данных, перейдя через массив и отфильтровывая его, или сразу же удалите всю закодированную строку JSON?
Другое дело, что я не уверен, как избежать символов U + 2028 и U + 2029 в PHP в любом случае. Могу ли я просто сделать str_replace? Я не уверен, что str_replace является многобайтовой безопасностью, а функция no mb_str_replace, если я не использую какой-то пользовательский. Итак, как вы удаляете/удаляете эти символы Unicode?
Большое спасибо.