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

使用rawurlencode编解码JSON时URL出现多余特殊字符问题求助

问题描述

尝试将图片URL的JSON数组传递至另一页面,但重定向URL中出现大量斜杠、特殊字符。已尝试urlencode和rawurlencode,问题依旧。

编码代码:

if (!empty($images)) {
    $encoded_urls = rawurlencode(json_encode($images));
    // Generate the redirect URL
    $redirect_url = add_query_arg([
        'urls' => $encoded_urls,
        'type' => 'image',
    ], site_url('/display-document/'));

    // Log the redirect URL for debugging
    error_log("Redirect URL: " . $redirect_url);

    // Send the JSON response with the redirect URL
    wp_send_json_success([
        'redirect_url' => $redirect_url
    ]);
} else {
    error_log("No images found.");
    wp_send_json_error('No document found for the given details.');
}

解码代码:

$documentUrls = isset($_GET['urls']) ? json_decode(rawurldecode($_GET['urls']), true) : []; 
$documentType = isset($_GET['type']) ? sanitize_text_field($_GET['type']) : '';

生成的URL示例:

https://checkvisaonlinenow.com/display-document/?urls=%5B%22https%3A%5C%2F%5C%2Fcheckvisaonlinenow.com%5C%2Fwp-content%5C%2Fuploads%5C%2F2024%5C%2F08%5C%2Fconverted_images%5C%2Fimage-66cb2563608de-0.jpeg%22%2C%22https%3A%5C%2F%5C%2Fcheckvisaonlinenow.com%5C%2Fwp-content%5C%2Fuploads%5C%2F2024%5C%2F08%5C%2Fconverted_images%5C%2Fimage-66cb2568a92f2-0.jpeg%22%2C%22https%3A%5C%2F%5C%2Fcheckvisaonlinenow.com%5C%2Fwp-content%5C%2Fuploads%5C%2F2024%5C%2F08%5C%2Fconverted_images%5C%2Fimage-66cb2569293a8-1.jpeg%22%5D&type=image
问题原因与解决方案

原因分析

  1. JSON默认转义斜杠:json_encode默认会把字符串中的/转义为\/,后续rawurlencode又会把转义符\编码成%5C,导致URL里出现大量冗余的%5C。
  2. 双重URL编码:add_query_arg函数本身会自动对参数值做URL编码,你提前手动调用rawurlencode等于做了两次编码,进一步放大了特殊字符问题。

修正方案

  • 禁用JSON对斜杠的转义:给json_encode添加JSON_UNESCAPED_SLASHES参数。
  • 移除手动的rawurlencode,让add_query_arg负责参数的URL编码。

修正后的编码代码

if (!empty($images)) {
    // 禁用斜杠转义,避免生成多余的\
    $json_urls = json_encode($images, JSON_UNESCAPED_SLASHES);
    // add_query_arg会自动处理URL编码,无需手动调用rawurlencode
    $redirect_url = add_query_arg([
        'urls' => $json_urls,
        'type' => 'image',
    ], site_url('/display-document/'));

    error_log("Redirect URL: " . $redirect_url);

    wp_send_json_success([
        'redirect_url' => $redirect_url
    ]);
} else {
    error_log("No images found.");
    wp_send_json_error('No document found for the given details.');
}

修正后的解码代码

PHP会自动解码$_GET中的URL编码参数,因此无需再调用rawurldecode,直接解析JSON即可:

$documentUrls = isset($_GET['urls']) ? json_decode($_GET['urls'], true) : []; 
$documentType = isset($_GET['type']) ? sanitize_text_field($_GET['type']) : '';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:21:13