gpt4 book ai didi

php - http_build_query() 点转换为下划线

转载 作者:可可西里 更新时间:2023-11-01 13:43:00 28 4
gpt4 key购买 nike

请检查以下数组:

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 对象:

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

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

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

最佳答案

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

来自documentation :

Dots and spaces in variable names are converted to underscores. For example < input name="a.b" /> becomes $_REQUEST["a_b"].

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

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

请注意,上面的代码只会修复 .(转换为 _)的问题,但不会修复空格。此外,如果您的原始 key 中有任何 _,这也将转换为 (如评论中所指出)。

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

不,这不是限制或废话功能:这是编程指南。如果您将数组键名称用于比您通常使用变量名称所做的更多的事情,那么您很可能在概念上做错了(我也做过很多次)。

只是举个例子说明这是多么错误:在一些编程解决方案中,如 (我认为也是 )POST/GET 请求应该映射到所谓的“ Controller ”中的函数。这意味着如果您发送一个看起来像 ["myKey"=> "myValue", "myOtherKey"=> "someValue"] 的 POST,那么您应该有一个将键作为参数的函数。

function(String myKey, String myOtherKey){ }

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

关于php - http_build_query() 点转换为下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18057687/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com