栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何防止json_encode()删除带有无效字符的字符串

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何防止json_encode()删除带有无效字符的字符串

php确实会尝试产生错误,但前提是 您必须关闭display_errors
。这很奇怪,因为该

display_errors
设置仅用于控制是否将错误打印到标准输出,而不是控制是否触发错误。我想强调一点
display_errors
,即使您继续看到其他各种php错误,php也不只是隐藏此错误,
它甚至不会触发它 。这意味着它将不会显示在任何错误日志中,也不会调用任何自定义的error_handlers。该错误永远不会发生。

这是一些演示此代码的代码:

error_reporting(-1);//report all errors$invalid_utf8_char = chr(193);ini_set('display_errors', 1);//display errors to standard outputvar_dump(json_enpre($invalid_utf8_char));var_dump(error_get_last());//nothingini_set('display_errors', 0);//do not display errors to standard outputvar_dump(json_enpre($invalid_utf8_char));var_dump(error_get_last());// json_enpre(): Invalid UTF-8 sequence in argument

这种怪异和不幸的行为与该错误https://bugs.php.net/bug.php?id=47494和其他一些错误有关,并且看起来永远不会得到修复。

解决方法:

在将字符串传递给json_enpre之前对其进行清理可能是一个可行的解决方案。

$stripped_of_invalid_utf8_chars_string = iconv('UTF-8', 'UTF-8//IGNORE', $orig_string);if ($stripped_of_invalid_utf8_chars_string !== $orig_string) {    // one or more chars were invalid, and so they were stripped out.    // if you need to know where in the string the first stripped character was,     // then see http://stackoverflow.com/questions/7475437/find-first-character-that-is-different-between-two-strings}$json = json_enpre($stripped_of_invalid_utf8_chars_string);

http://php.net/manual/zh/function.iconv.php

手册说

//IGNORE
静默丢弃目标字符集中的非法字符。

因此,通过首先删除有问题的字符,理论上json_enpre()不应该得到任何会窒息而失败的东西。我尚未验证带

//IGNORE
标志的iconv的输出与有效utf8字符的json_enpres概念完全兼容,因此请当心……在某些情况下它仍然会失败。恩,我讨厌字符集问题。


在php 7.2+中进行 编辑 ,似乎有一些新的标记

json_enpre

JSON_INVALID_UTF8_IGNORE
并且
JSON_INVALID_UTF8_SUBSTITUTE

还没有太多文档,但是就目前而言,该测试应该可以帮助您了解预期的行为:https :
//github.com/php/php-src/blob
/master/ext/json/tests/json_enpre_invalid_utf8.phpt

并且,在php
7.3+中,有一个新标志

JSON_THROW_ON_ERROR
。参见http://php.net/manual/en/class.jsonexception.php



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435296.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号