Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
urlencode的PHP系统变更案例_Php - Fatal编程技术网

urlencode的PHP系统变更案例

urlencode的PHP系统变更案例,php,Php,我正在向一个系统发送一个URL编码的字符串,然后他们将该字符串发送回我,但是URL编码的字符中有一个小写字符,而不是大写字符 有没有一种简单的方法让我找到每个实例并将其改为大写 这里有一个例子 我要发送的内容: 6Vc6K83k%2FnBWb6sOfc0fcQiMOttpKJci9o%2B%2BdMBs0MCGJgQkgyr6zV%2FO8hqRATKW1uUYEs5zOqKso36x%2BydCc6 我得到的回报: 6Vc6K83k%2fnBWb6sOfc0fcQiMOttpKJci9o%2

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

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

这里有一个例子

我要发送的内容:

6Vc6K83k%2FnBWb6sOfc0fcQiMOttpKJci9o%2B%2BdMBs0MCGJgQkgyr6zV%2FO8hqRATKW1uUYEs5zOqKso36x%2BydCc6
我得到的回报:

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

谢谢

使用
preg\u replace\u callback
并将
/%[a-zA-Z0-9]{2}/
替换为其大写等价物,使用
strtoupper

5.3+:

小于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);

演示

产出:

字符串(96)“6Vc6K83k%2FnBwB6SOFCQimottpKJCI9O%2BdMBs0MCGJgQkgyr6zV%2FO8QRATKW1UYES 5ZOQKSO36X%2BYDC6”



或者,'s
$string=urlencode(urldecode($string))工作正常。

使用
preg_replace_callback
并将
/%[a-zA-Z0-9]{2}/
替换为其大写等价物,使用
strtoupper

5.3+:

小于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);

演示

产出:

字符串(96)“6Vc6K83k%2FnBwB6SOFCQimottpKJCI9O%2BdMBs0MCGJgQkgyr6zV%2FO8QRATKW1UYES 5ZOQKSO36X%2BYDC6”



或者,'s
$string=urlencode(urldecode($string))工作正常。

为什么需要更改它?听起来你是在试图完全解决另一个问题的症状。因为这些信息是一个半加密的散列,它扰乱了接收端的解密方法。也许url对其进行解码,然后再对其进行url编码?如果解码步骤成功生成原始字符串,则对其重新编码应产生与原始发送的值相同的值。为什么需要更改?听起来你是在试图完全解决另一个问题的症状。因为这些信息是一个半加密的散列,它扰乱了接收端的解密方法。也许url对其进行解码,然后再对其进行url编码?如果解码步骤成功地生成了原始字符串,那么对其重新编码将产生与最初发送的值相同的值。
<?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);
?>