ZetCode

PHP curl_unescape 函数

最后修改日期:2025 年 4 月 11 日

PHP curl_unescape 函数解码 URL 编码的字符串。它是 cURL 扩展的一部分,提供 URL 解码功能。该函数在处理编码的 URL 或查询参数时非常有用。

基本定义

curl_unescape 函数解码 URL 编码的字符串。它返回解码后的字符串,如果失败则返回 FALSE。该函数需要一个活动的 cURL 句柄作为其第一个参数。

语法:curl_unescape(CurlHandle $handle, string $string): string|false。句柄必须使用 curl_init() 创建。此函数将加号 (+) 解码为空格,并将百分比编码的字符解码。

基本 URL 解码

此示例演示了使用 curl_unescape 进行基本 URL 解码。

basic_unescape.php
<?php

declare(strict_types=1);

$ch = curl_init();
$encoded = "Hello%20World%21%20How%20are%20you%3F";

$decoded = curl_unescape($ch, $encoded);

if ($decoded === false) {
    echo "Decoding failed";
} else {
    echo "Decoded string: " . $decoded;
}

curl_close($ch);

此代码解码包含空格和标点符号的 URL 编码字符串。%20 序列变成空格,%21 变成感叹号。始终检查返回值以处理潜在的失败。

解码查询参数

此示例展示了如何使用 curl_unescape 解码 URL 查询参数。

query_unescape.php
<?php

declare(strict_types=1);

$ch = curl_init();
$query = "name=John%20Doe&age=30&city=New%20York";

$parts = explode("&", $query);

foreach ($parts as $part) {
    list($key, $value) = explode("=", $part);
    $decodedValue = curl_unescape($ch, $value);
    echo "$key: $decodedValue\n";
}

curl_close($ch);

我们分别解码 URL 查询字符串中的每个键值对。字符串被分割成键值对,然后解码每个值。这种方法在处理来自 $_GET 或 $_REQUEST 的 URL 参数时很有用。

与 urldecode 比较

此示例将 curl_unescape 与 PHP 的内置 urldecode 函数进行比较。

compare_unescape.php
<?php

declare(strict_types=1);

$ch = curl_init();
$encoded = "price%3D100%24%26discount%3D15%25";

$curl_decoded = curl_unescape($ch, $encoded);
$php_decoded = urldecode($encoded);

echo "curl_unescape: $curl_decoded\n";
echo "urldecode: $php_decoded\n";

curl_close($ch);

对于标准的 URL 编码,两个函数都产生相同的输出。但是,curl_unescape 需要一个 cURL 句柄,而 urldecode 不需要。在大量使用 cURL 的应用程序中,为了保持一致性,可能更倾向于使用 cURL 版本。

处理特殊字符

此示例演示了解码包含特殊字符的字符串。

special_chars.php
<?php

declare(strict_types=1);

$ch = curl_init();
$encoded = "%E2%82%AC%20100%2C%20%C2%A3100%2C%20%24100";

$decoded = curl_unescape($ch, $encoded);

if ($decoded === false) {
    echo "Failed to decode special characters";
} else {
    echo "Decoded currencies: " . $decoded;
}

curl_close($ch);

我们解码了一个包含不同货币符号的百分比编码 Unicode 字符的字符串。curl_unescape 正确处理 UTF-8 编码的字符,使其适用于国际化应用程序。

错误处理

此示例展示了使用 curl_unescape 时的正确错误处理。

error_handling.php
<?php

declare(strict_types=1);

$ch = curl_init();

// Invalid percent encoding
$invalid = "100% discount";

$result = curl_unescape($ch, $invalid);

if ($result === false) {
    echo "Error: Invalid encoded string\n";
    echo "cURL error: " . curl_error($ch) . "\n";
} else {
    echo "Decoded: $result";
}

curl_close($ch);

我们尝试解码一个无效的 URL 编码字符串。当函数遇到格式错误的百分比编码时,它会返回 FALSE。在生产代码中,始终检查返回值并适当地处理潜在错误。

最佳实践

来源

PHP curl_unescape 文档

本教程通过实际示例介绍了 PHP curl_unescape 函数,展示了其在各种场景下的 URL 解码用法。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有超过十年的经验。

所有 PHP cURL 教程列表。