weixin_41244451 2024-06-12 22:38 采纳率: 93.9%
浏览 1
已结题

为什么传到b.php的numbers这个值不一样?

a.htm:在这个页面,alert(numbers)打印出来的是:+9 -7 +1

function chongzuo(numbers) {
    // 将题目信息编码并附加到URL
    alert(numbers);
    window.location.href = '/oa/b.php?act=yunsuan&numbers=' + numbers + '';
}

b.php:在这个页面,echo $numbers;打印出来的是:9 -7 1

$numbers     = isset($_REQUEST['numbers']) ? trim($_REQUEST['numbers']) : '';
echo $numbers;exit;

为什么传到b.php的numbers这个值不一样?

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-06-12 22:39
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    这个问题的原因在于JavaScript和PHP在处理字符串时的默认行为不同,尤其是在URL编码方面。

    在JavaScript中,当你使用window.location.href来设置URL时,浏览器会自动对URL中的特定字符进行编码,以确保它们能够安全地传输。然而,在这个例子中,看起来并没有发生这种情况,可能是因为numbers变量中的+符号在URL中被解释为一个空格( )。

    在PHP中,当你使用$_REQUEST来获取URL参数时,PHP会尝试对URL参数进行解码。但是,如果URL没有正确编码,那么解码可能不会按预期工作。

    要解决这个问题,你可以在JavaScript中手动对numbers变量进行URL编码,然后再将其附加到URL上。这样,即使+符号被错误地解释为空格,它也会被编码为%2B,从而在PHP端正确地解码。

    这里是修改后的JavaScript代码:

    function chongzuo(numbers) {
        // 将题目信息编码并附加到URL
        var encodedNumbers = encodeURIComponent(numbers); // 对numbers进行URL编码
        alert(encodedNumbers); // 可选:显示编码后的值
        window.location.href = '/oa/b.php?act=yunsuan&numbers=' + encodedNumbers;
    }
    

    在PHP端,你不需要做任何改变,因为urlencodeurldecode是URL编码和解码的标准函数,PHP会正确处理它们。

    至于参考资料,你可以查看以下链接来了解更多关于URL编码的信息:

    这些资源将帮助你更好地理解URL编码和解码的过程,以及如何在Web开发中正确使用它们。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月13日
  • 已采纳回答 6月13日
  • 创建了问题 6月12日

悬赏问题

  • ¥15 访问url时不会自动调用其 Servlet的doGet()
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥15 MATLAB解决问题
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享