为什么 JSON_UNESCAPED_LINE_TERMINATORS 没有转义我的换行符?

2024-04-09

基于文档 http://docs.php.net/manual/en/json.constants.php,我预计JSON_UNESCAPED_LINE_TERMINATORS保留换行符 (\n) 字符未转义,因此在编码 JSON 时作为实际换行符:

JSON_UNESCAPED_LINE_TERMINATORS(整数)
行终止符在以下情况下保持未转义:JSON_UNESCAPED_UNICODE已提供。它使用与 PHP 7.1 之前相同的行为,但没有此常量。从 PHP 7.1.0 开始可用。

最小的例子:

$ php -r 'echo json_encode(["foo" => "bar\nbaz"], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_LINE_TERMINATORS) . "\n";'
{"foo":"bar\nbaz"}

我期望:

{"foo":"bar
baz"}

(Note that this is valid JSON; only \ and " must be escaped in a string.)

为什么这个选项没有按预期工作?


[编辑] 我错误地阅读了 JSON 规范:字符串内未编码的换行符是not有效的 JSON。控制字符从 U+0000 到 U+001Fmust被逃脱。 PHP 不包含未编码的内容是正确的,尽管文档显然可以改进!

我必须去source https://github.com/php/php-src/blob/da0663a337b608a4b0008672b494e3a71e6e4cfc/ext/json/json_encoder.c#L340找出这一点。本文中的“行终止符”仅指晦涩的 Unicode 代码点 U+2028 行分隔符和 U+2029 段落分隔符:

                /* Escape U+2028/U+2029 line terminators, UNLESS both
                   JSON_UNESCAPED_UNICODE and
                   JSON_UNESCAPED_LINE_TERMINATORS were provided */
                } else if ((options & PHP_JSON_UNESCAPED_UNICODE)
                    && ((options & PHP_JSON_UNESCAPED_LINE_TERMINATORS)
                        || us < 0x2028 || us > 0x2029)) {

这与 Unicode 的内容相冲突defines https://en.wikipedia.org/wiki/Newline#Unicode作为行终止符:

Unicode 标准定义了一些符合应用程序应将其识别为行终止符的字符:

LF:    Line Feed, U+000A
VT:    Vertical Tab, U+000B
FF:    Form Feed, U+000C
CR:    Carriage Return, U+000D
CR+LF: CR (U+000D) followed by LF (U+000A)
NEL:   Next Line, U+0085
LS:    Line Separator, U+2028
PS:    Paragraph Separator, U+2029
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 JSON_UNESCAPED_LINE_TERMINATORS 没有转义我的换行符? 的相关文章

  • Magento - 将特定父类别的子类别列为链接

    我是 php 的初学者 并且一直试图将一个父类别的子类别作为链接调用 我得到了这个 它调出了 getName 但 getUrl 根本没有返回任何 URL 输出代码只是 li a href name of sub a li
  • 覆盖供应商自动加载编辑器

    有没有办法让您创建的自动加载文件在调用供应商自动加载之前运行 我们似乎遇到了 SimpleSAML 的自动加载覆盖我们创建的自动加载文件之一的问题 我是 Composer 的新手 似乎无法在网上找到任何解决方案 我尝试将我们的自动加载文件包
  • Zend IMAP 搜索和过滤器

    我如何使用 Gmail 中的过滤器进行搜索 就像获取带有特定标签的电子邮件列表或来自特定电子邮件地址的邮件列表一样 我无法在文档中找到它 注意 我使用 oAuth 进行身份验证 我希望这与搜索无关 Gmail 上的标签实际上是 从 IMAP
  • Magento补丁安装失败

    从以下位置下载并运行 Magento PHP 5 4 支持补丁 Magento CE v1 7 0 0 1 7 0 2 时http www magentocommerce com download http www magentocomme
  • TOMCAT 6 中的 PHP - 异常

    我一直在努力融入PHP in APACHE TOMCAT 6依照指示second answer为了QUESTION https stackoverflow com questions 779246 run a php app using t
  • Laravel 广播:通知与事件

    我阅读了 laravel 文档Events and Notifications 似乎我们可以触发一个事件 并从该事件中触发 使用ShouldBroadcast接口 将其广播到我理解的 laravel echo 另一方面我们可以使用通知via
  • PHP 中的 Preg_replace

    我想替换 中包含的字符串中的内容content 它是多行等 preg replace 函数应该删除整个 com 没有垫子 蒙特 尝试这个 result preg replace s replacement content subject
  • 如何在 JSON 中转义双引号

    我试图显示双引号 但它显示了反斜杠之一 maingame day1 text1 Tag 1 text2 Heute startet unsere Rundreise Example text Jeden Tag wird ein neues
  • 在 swift 中将简单字符串转换为 JSON 字符串

    我知道有一个同标题的问题here https stackoverflow com questions 30825755 convert string to json string in swift 但在那个问题中 他试图将字典转换为 JSO
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • PHP7构造函数类名

    我有一个 Laravel 4 2 应用程序 它可以与 PHP5 一起使用 没有任何问题 由于我安装了一个运行 PHP7 的新 vagrant box 一旦我运行一个模型 其中函数名称与类名称 关系函数 相同 就会出现错误 如下所示
  • 如何编写在正文中包含锚标记的 Zend Framework URL?

    使用 Zend Framework 中设置的标准 MVC 我希望能够显示始终具有锚点的页面 现在我只是在 phtml 文件中添加一个带有 anchor 的无意义参数
  • Azure 应用服务在配置中添加字符串数组

    Net core 应用程序并在 Azure 应用服务中部署该应用程序 在我的应用程序中 我有一个包含以下内容的应用程序 settings json 文件 Roles Roles Admins Users 我的 ARM 模板中有以下配置 参数
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • Kubernetes / kubectl - “必须指定容器名称”,但看起来确实如此?

    我正在调试 kubectl 的日志输出 其中指出 Error from server BadRequest a container name must be specified for pod postgres operator 49202
  • php 表单提交 - Q2

    我对这个虚拟问题感到抱歉 这是我的简单 PHP 表单 其中包含两个 SQL 表和 ADD 提交 按钮 我希望将人员从 Test1 转移到 Test2 很多事情都很好 只有提交按钮不起作用 因此 Test2 表没有反馈 Revised 现在提
  • Zend Framework Zend_Form 装饰器: 位于按钮元素内部?

    我有一个像这样创建的按钮元素 submit new Zend Form Element Button submit submit gt setLabel My Button submit gt setDecorators array Vie
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了
  • “pdo_mysql”已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

    pdo mysql 已禁用 我无法启用它 我在 iMac 7 1 OSX 10 6 8 上安装了 MAMP v 3 0 4 在我的 phpinfo 页面上 我可以看到唯一启用的 PDO 是 sqlite 如果我查看 php 5 5 10 扩

随机推荐

  • 如何在结构字段上创建可变迭代器

    所以我正在使用 Rust 开发一个小型 NES 模拟器 并且我正在尝试使用我的状态寄存器 寄存器是一个结构体 其中包含一些包含布尔值的字段 标志 寄存器本身是 CPU 结构体的一部分 现在 我想循环这些字段并根据我执行的某些指令设置布尔值
  • 为什么 -std=c++98 标志有时不起作用?

    情况如下 我想创建一个简单的 C 程序 但它必须使用onlyC 98 函数 我在用Ubuntu 20 04 4 LTS 我在用c 作为编译器我使用以下标志进行编译 Wall Werror Wextra std c 98 pedantic e
  • JTabbedPane 自定义选项卡外观

    我想自定义 JTabbedPane 中选项卡的外观 我想从最简单 最朴素的行为开始 无边框 纯色 问题是仍然存在不平整的情况 选项卡的边距略有重叠 您会看到 由于选择了第二个选项卡 因此它被 带到了前台 这是通过轻微的边距重叠来实现的 有没
  • staruml 抽象类?

    有谁知道如何使用 StarUML 创建抽象类 我在文档中找不到任何提及 是否有某种反映抽象类的更一般的概念 从工具箱中选择类并将其添加到画布中 然后转到属性选择 isAbstract 复选框 然后类名显示为斜体
  • C++ timegm 将 DST 转换为未来某个给定时间的某个时区?

    我需要在我的班级中从 UTC 时间准确转换为给定时区的本地时间 无论 DST 是否有效 我的问题是 当我使用struct tm我必须提供 tm isdst 成员 或者将其保留为 1 以自动确定 from mktime 3 linux man
  • 关于Android应用程序更新的问题

    几个问题 升级应用程序对存储的数据 即首选项和数据库 有什么影响 系统是否执行新版本的全新安装 即删除旧版本然后安装新版本 或其他操作 如果用户想要保留存储的数据 例如共享首选项或 SQLite 数据库中的值 怎么办 如何模拟此应用程序更新
  • 在 Android Lollipop 5.0.1 的工作配置文件中安装未知来源的应用程序

    问题与 工作简介 相关安卓工作用 我编写了一个示例应用程序 它创建托管工作配置文件并将其自身设置为个人资料所有者 我需要通过配置文件所有者推送一些企业应用程序 因此 当我尝试安装时 它显示 安装被阻止 无法从未知来源安装 如果我切换按钮 设
  • 尝试使用 chrome.downloads (由于某种原因未定义)[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Chrome 扩展从 URL 下载文件 图像 chrome 下载 https developer chrome com extensions downloads 但由于某种原因chrome dow
  • LINQ to Entities 无法识别该方法

    我在使用 Linq to Entities 时遇到问题 无法找到解决方法 这是我的代码 var queryResult result Where x gt x FollowedUp Value GetWeekFromDateTime Dat
  • 专门用于shared_ptr的集合

    是否存在一个集合 它知道shared ptr内部 并避免定期复制存储的shared ptr元素 而只复制其内部弱指针 这隐含地意味着 不会执行任何构造函数 析构函数调用 并且不会对shared ptrs的引用计数器进行操作 理论上 在采用C
  • 使用布尔系列/数组从 pandas 数据框中选择

    我有一个数据框 High Low Close Date 2009 02 11 30 20 29 41 29 87 2009 02 12 30 28 29 32 30 24 2009 02 13 30 45 29 96 30 10 2009
  • 避免在会话中存储不同 SQL 模式的连接字符串

    我计划在 Azure 中建立一个多租户应用程序 其中通过架构分离实现数据隔离 我计划使用子域来识别租户 想法是从子域获取租户名称 从登录页面获取用户 ID 和密码 并验证 uid 密码和租户 ID 以进行身份 验证 如果经过身份验证 则应用
  • 如何将 Typescript 模块转换为 JavaScript

    我有一个像这样的 src 工作目录 src functions final utils I have two文件 都在 final 内 我需要将其从打字稿转换为JavaScript才能在浏览器中运行 问题是 我的最终文件正在从其他 src
  • 如何修复 py2app 上的 distutils.errors.DistutilsError? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我最近尝试使用 py2app 并且有一个名为 test py 的简单应用程序 一切都很好 直到我输入 python3 setup
  • 如何使用 Xamarin.Forms 显示警报框以进行验证?

    How to 使用 Xamarin Forms 显示警报框用于验证 我知道我们可以使用 ContentView 代码后面的以下代码显示警报 但我想显示我的 ViewModel 中的警报框 DisplayAlert Alert You hav
  • 失败安装解析失败清单格式错误

    我在安装应用程序时遇到一个奇怪的问题 当我编译我的项目时没有错误 但是当我尝试启动它时显示 安装错误 INSTALL PARSE FAILED MANIFEST MALFORMED Error 我已经尝试了很多与安装错误相关的事情 INST
  • Azure 数据工厂 V2 中的分页规则值(适用于 Rest API)

    我正在尝试填写Value分页规则内的框解释于本文 https sqlkover com azure data factory and the exact online rest api dealing with pagination 最近发
  • 使用 Ruby 控制 Tor 客户端

    我正在编写一个 Ruby 脚本 它会自动抓取网站进行数据分析 现在我有一个相当复杂的需求 我必须能够模拟来自多个国家 大约 20 个不同国家 的访问 该网站将根据 IP 位置包含不同的信息 因此完成该操作的唯一方法是从实际位于该国家 地区的
  • Snakemake 输出中的 lambda 函数

    我目前有一个snakemake工作流程 需要使用lambda通配符 设置如下 蛇文件 configfile config yaml workdir config work rule all input expand logs bwa ref
  • 为什么 JSON_UNESCAPED_LINE_TERMINATORS 没有转义我的换行符?

    基于文档 http docs php net manual en json constants php 我预计JSON UNESCAPED LINE TERMINATORS保留换行符 n 字符未转义 因此在编码 JSON 时作为实际换行符