http_build_query() 点转换为下划线

2024-02-25

请检查以下数组:

Array([bunrey] => Array ([0] => 20130730181908615391000000)
      [mt.shasta] => Array ( 
        [0] => 20130708203742347410000000
        [1] => 20130213201456984069000000
        [2] => 20130712144459481348000000
      )
      [shingletwon] => Array
      (
        [0] => 20130801233842122771000000
      )
)

我想使用此数组作为查询字符串发送http_build_query(), 使用后我得到了以下字符串http_build_query():

bunrey%5B0%5D=20130730181908615391000000&mt.shasta%5B0%5D=20130708203742347410000000&mt.shasta%5B1%5D=20130213201456984069000000&mt.shasta%5B2%5D=20130712144459481348000000&shingletwon%5B0%5D=20130801233842122771000000

正如您在将此查询字符串发送到其他文件后所看到的,我正在尝试检索。我曾附和$_REQUEST object:

Array (
[bunrey] => Array
    (
        [0] => 20130730181908615391000000
    )

[mt_shasta] => Array
    (
        [0] => 20130708203742347410000000
        [1] => 20130213201456984069000000
        [2] => 20130712144459481348000000
    )
[shingletwon] => Array
    (
        [0] => 20130801233842122771000000
    )
)

请检查其中一个密钥mr.shasta已更改为mr_shasta。 你们能为此提供任何解决方案吗?


这是标准的 PHP 行为。当在 POST 请求中用作数组键时,点将转换为下划线。

来自文档 https://www.php.net/manual/it/language.variables.external.php:

变量名中的点和空格将转换为下划线。为了 例如 变为 $_REQUEST["a_b"]。

唯一的解决方案是:在 POST 请求中使用数组键时,停止在数组键中使用空格和/或点,或者对收到的每个数组键进行字符串替换。

$post = array();
foreach ($_POST as $key => $value)
$post[str_replace("_", ".", $key)] = $value;

请注意,上面的代码只能解决以下问题.(转换成_) 但不包括空格。另外,如果你有任何_在你的原始密钥中,这将被转换为.以及(正如评论中指出的)。

如您所见,唯一真正的解决方案是避免.和空间$_POST键。它们只是无法被接收,不能使用 PHP(也不能使用我所知道的其他服务器端解决方案):您将丢失该信息。

不,这不是限制或垃圾功能:这是编程指南。如果您使用数组键名称执行的操作超出了通常使用变量名称执行的操作,那么您很可能在概念上做错了一些事情(我也这样做过很多次)。

只是给你一个例子来说明这是多么错误:在一些编程解决方案中,例如ASP.NET-MVC /questions/tagged/asp.net-mvc(而且,我认为,代码点火器 /questions/tagged/codeigniter也)POST/GET 请求应该映射到所谓的“控制器”中的函数。这意味着如果您发送一个类似于["myKey" => "myValue", "myOtherKey" => "someValue"]然后你应该有一个以键作为参数的函数。

function(String myKey, String myOtherKey){ }

PHP 没有默认的“顶层”框架(据我所知)可以执行此操作:它允许您直接访问 $_POST。很酷:但是这个玩具很容易坏。请谨慎使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

http_build_query() 点转换为下划线 的相关文章

  • 如何捕获生成器抛出的异常并恢复迭代?

    我有一个生成器 它将值的集合传递给方法并生成结果 调用的方法可能会返回异常 发生这种情况时 我希望异常转到调用生成器来处理异常的代码 然后继续循环生成器 为了说明这一点 下面是一个生成器的示例 它将产生1 抛出一个 Exception 然后
  • 通过API更新Twitter背景

    我在通过 Twitter 的 API 更新背景时遇到了一些问题 target url http www google com logos 11th birthday gif ch curl init curl setopt ch CURLO
  • PHP UTF-8 配置

    我正在使用 PHP 5 3 5 配置 Apache 2 2 17 服务器 我的目标是创建一个默认为内容类型的干净配置UTF 8 php ini default charset UTF 8 default mimetype applicati
  • 将 XML 数据提取到 php [重复]

    这个问题在这里已经有答案了 我正在尝试从 XML 文件中提取数据 http freegeoip net xml google com http freegeoip net xml google com 您可以看到该文件的内容类似于
  • preg_replace_callback 要求参数 2 是一个有效的回调...卡住了!

    public function make url clickable cb matches ret url matches 2 if empty url return matches 0 removed trailing from URL
  • 如何在 Yii 中设置 returnUrl 值

    我正在使用 Yii 我遇到的问题是Yii app gt user gt returnUrl 它总是让我回到index php page 由于我不知道用户从哪个页面访问了当前页面 如何将其值设置为请求当前页面的页面 您可以使用Yii app
  • MySQL 连接不工作:2002 没有这样的文件或目录

    我正在尝试设置 WordPress 我已经运行了 Apache 和 MySQL 并且帐户和数据库都已设置 我尝试建立一个简单的连接 我总是得到这个 错误 2002 没有这样的文件或 目录 它正在谈论什么文件或目录 我使用的是 OS X Sn
  • 用于添加和删除客户名称的 Web 表单出现问题

    我正在尝试创建一个 Web 表单 其中列出了所有客户 然后为您提供一个文本字段 旁边有一个按钮 您可以在其中添加客户 然后它应该显示客户列表 旁边有删除按钮 您可以单击该按钮从数据库中删除客户 我正在让它发挥作用 对于初学者来说 它会回显
  • PHP 中两个关联多维数组的值求和

    我正在尝试对两个关联数组的值求和 这是第一个数组 Array Jan 01 2013 gt Array COM gt 100 RES gt 200 Oct 28 2014 gt Array COM gt 300 RES gt 400 这是第
  • 在 while 循环之外使用变量(作用域)

    关于 PHP 范围的小问题 我似乎无法在 while 循环之外调用变量 report 我尝试过各种事情 包括return 这不起作用 这里唯一起作用的两个函数是如果我echo变量 report在循环内 或者如果我print它 我不想这样做
  • 数组和关联数组合并

    如何实现第三个数组 合并Array1和Array2 在 PHP 中做到这一点的最佳方法是什么 非常感谢 Array2 具有类似索引 键 即 Array1 中 id 的关联值 Array1 Array 0 gt Array id gt 56
  • 使用 Jquery Easyui 将数据网格导出到 Excel

    我是 json 新手 我使用 php 从 mysql 表生成了 jason 数据 并希望将生成的 json 导出为 xls 格式 考试导出 php
  • Facebook PHP API 登录时抛出异常

    我尝试使用 Facebook Graph API 登录并获取用户信息 我用来获取用户信息的代码以前可以工作 但今天我尝试使用 Facebook 登录 但 Facebook API 抛出此错误 未定义的偏移量 1 home vendor fa
  • fsockopen() 和 SSL 出错,“无法启用加密”

    我正在尝试连接到 Nominet EPP 测试台 但收到 无法启用加密 的消息 这似乎是一个罕见的错误 没有记录的解决方案或原因 用行 socket fsockopen ssl testbed epp nominet org uk 700
  • 如何从 jquery .load 获取 php 响应

    例如我给出另一个代码 这是我的 some3 php 代码 第一个文件
  • 我可以在 Laravel 5.2 中创建一个继承自 User 的新类吗?

    我对 Laravel 还很陌生 使用的是迄今为止的最新版本 5 2 因此我遇到了以下困境 我知道 Laravel 附带了一个User开箱即用的类 但我想开发一个系统 在其中我可以有另外两种类型的用户 称为Researcher and Adm
  • 使用mysql数据按高低价格排序

    这是我所拥有的以及我想做的 我的 MySql 数据库中有 12 个项目 4 个产品为 4 99 4 个产品为 3 99 4 个产品为 2 99 我意识到我可以像这样查询数据库 它会给我一个该价格的产品列表
  • 在 Woocommerce 的单个产品页面上显示特定的自定义产品属性

    我找到了以下代码 https isabelcastillo com woocommerce product attributes functions在产品详细信息页面上显示所有自定义属性 具有我需要的特定条形设计 代码的工作方式就像一个魅力
  • 如何从 php 中的 .doc 文件获取页面数,以下代码适用于 .docx 而不是 .doc

    此代码工作 docx 格式文档 但我需要 doc 格式文档计数 php 中的页数 function CountPagesDocx filename zip new ZipArchive if zip gt open filename tru
  • 包含当月所有日期的 PHP 数组 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试并且仍然想知道如何获得一个

随机推荐