1

我正在向系统发送一个 urlencoded 字符串,然后他们将其发回给我,但是 URL 编码的字符中有一个小写而不是大写字符。

有没有一种简单的方法可以让我找到每个实例并将其更改为大写?

这是一个例子

我要发送的内容:

6Vc6K83k%2FnBWb6sOfc0fcQiMOttpKJci9o%2B%2BdMBs0MCGJgQkgyr6zV%2FO8hqRATKW1uUYEs5zOqKso36x%2BydCc6

我得到的回报:

6Vc6K83k%2fnBWb6sOfc0fcQiMOttpKJci9o%2b%2bdMBs0MCGJgQkgyr6zV%2fO8hqRATKW1uUYEs5zOqKso36x%2bydCc6

谢谢!

4

1 回答 1

4

使用preg_replace_callback并替换/%[a-zA-Z0-9]{2}/为大写等效项strtoupper

5.3+:

$string = preg_replace_callback('/%[a-zA-Z0-9]{2}/', function($match) {
    return strtoupper($match[0]);
}, $string);

小于 5.3:

function preg_replace_callback_uppercaser($match) {
    return strtoupper($match[0]);
}
$string = preg_replace_callback('/%[a-zA-Z0-9]{2}/', 'preg_replace_callback_uppercaser', $string);

演示

<?php
    $string = '6Vc6K83k%2fnBWb6sOfc0fcQiMOttpKJci9o%2b%2bdMBs0MCGJgQkgyr6zV%2fO8hqRATKW1uUYEs5zOqKso36x%2bydCc6';

    $string = preg_replace_callback('/%[a-zA-Z0-9]{2}/', function($match) {
        return strtoupper($match[0]);
    }, $string);

    var_dump($string);
?>

输出:

字符串 (96) "6Vc6K83k%2FnBWb6sOfc0fcQiMOttpKJci9o%2B%2BdMBs0MCGJgQkgyr6zV%2FO8hqRATKW1uUYEs5zOqKso36x%2BydCc6"

链接到现场演示


或者,David$string = urlencode(urldecode($string));工作正常。

于 2013-10-25T16:59:39.750 回答