You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何将http:/\/\test转为http://test?表单URL存储转义问题求助

问题分析与解决方法

首先,你的问题根源在于json_encode()的默认行为:它会自动对URL中的正斜杠(/)进行转义,所以生成的JSON字符串里http://test会变成http:\/\/test,写入到txt文件后就显示为你看到的转义形式。而var_dump($data)显示正常是因为此时$data还是PHP数组,还没经过JSON编码转义。

解决步骤

  1. 修改JSON编码参数
    在调用json_encode()时,添加JSON_UNESCAPED_SLASHES参数,这个参数会禁止转义正斜杠,保留URL的原始格式:

    $data = json_encode($data, JSON_UNESCAPED_SLASHES);
    
  2. 移除不必要的urldecode()调用
    你的urldecode()其实是多余的——PHP的$_POST变量已经自动对表单提交的参数进行了解码,直接使用$_POST['nameURL']、$_POST['asyncURL']等即可,不需要额外解码。可以把代码里的urldecode()都去掉,比如:

    "Callback" => $nameURL, // 代替 urldecode($nameURL)
    

修改后的完整PHP代码片段

if (isset($_POST['submit'])) { 
    $nameURL = $_POST['nameURL']; 
    $param = $_POST['param']; 
    if($_POST['radiobutton']=='asynchronous'){ 
        $asyncURL = $_POST['asyncURL']; 
        $asyncParam = $_POST['asyncParam']; 
        $data = array( 
            "Callback" => $nameURL, 
            "Param" => $param, 
            "asynchronous" => array( 
                "Callback" => $asyncURL, 
                "Param" => array( $asyncParam ) 
            ) 
        ); 
    }else if($_POST['radiobutton']=='synchronous'){ 
        $syncURL = $_POST['syncURL']; 
        $syncParam = $_POST['syncParam']; 
        $data = array( 
            "Callback" => $nameURL, 
            "Param" => $param, 
            "synchronous" => array( 
                "Callback" => $syncURL, 
                "Param" => array( $syncParam ) 
            ) 
        ); 
    } 
    // 添加JSON_UNESCAPED_SLASHES参数防止斜杠转义
    $data = json_encode($data, JSON_UNESCAPED_SLASHES); 
    $filename = date('YmdHis').".txt"; 
    if(!file_exists($filename)){ 
        $fh = fopen($filename, 'w') or die("Can't create file!"); 
    } 
    $ret = file_put_contents($filename, $data, FILE_APPEND | LOCK_EX); 
    if($ret == false){ 
        die('There was an error writing this file'); 
    }
}

额外说明

  • 当你用var_dump($data)查看数组时,看到的是PHP原生数据结构,没有经过JSON转义,所以URL显示正常;而写入文件的是JSON格式的字符串,默认转义规则会处理斜杠,添加JSON_UNESCAPED_SLASHES就能避免这个问题。
  • 你的HTML表单里,asyncURL和syncURL用的是type="text",可以改成type="url",这样浏览器会自动验证URL格式,提升用户体验。

内容的提问来源于stack exchange,提问作者jhon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:08:49