用PHP解析C#urltokencode字符串
我有以下c#代码,它使用URLTokencode将图像转换为base64编码字符串:用PHP解析C#urltokencode字符串,c#,php,urlencode,url-encoding,C#,Php,Urlencode,Url Encoding,我有以下c#代码,它使用URLTokencode将图像转换为base64编码字符串: byte[] imageArray = System.IO.File.ReadAllBytes(note_path); string base64ImageRepresentation = HttpServerUtility.UrlTokenEncode(imageArray); byte[] data = Encoding.UTF8.GetBytes($"id
byte[] imageArray = System.IO.File.ReadAllBytes(note_path);
string base64ImageRepresentation = HttpServerUtility.UrlTokenEncode(imageArray);
byte[] data = Encoding.UTF8.GetBytes($"id={id}&apikey={apikey}&friend_ids={friend_ids}&ttl={ttl}¬e={base64ImageRepresentation}");
Console.Write(sendRequest("upload-note", data));
Console.ReadLine();
我将其发送到lamp服务器,通过php进行解析。显然,这不起作用,因为URLTokencode如何使用-
表示+
,-
表示/
,以及整数表示填充等于符号。我有以下代码来克服这个问题:
$request->note = str_replace('-', '+', str_replace('_', '/', $request->note));
$lastCharacter = substr($request->note, -1);
if($lastCharacter == 1 || $lastCharacter == 2){
$request->note = substr($request->note, 0, -$lastCharacter);
if($lastCharacter == 1){
$request->note = $request->note . '=';
} else {
$request->note = $request->note . '==';
}
}
我对这个过程的关注来自于后面的等号。我读到只有1或2个等号表示填充,但有没有可能出现没有填充的情况?如果这是可能的,那么字符串的最后一个字符可能是任意随机整数值,对吗?如果这是真的,那么我当前的php解码过程将不起作用,因为它假设最后一个字符总是1或2,并且该字符将表示所需的等号数
如果我的过程不起作用,有没有更好的方法用PHP解码c#UrlTokenEncode字符串?来回答我的上述问题:
function convertToUrlTokenFormat($val){
$padding = substr_count($val, '=');
$val = str_replace('=', '', $val);
$val .= $padding;
$val = str_replace('+', '-', str_replace('/', '_', $val));
return $val;
}
function convertFromUrlTokenFormat($val){
$val = str_replace('-', '+', str_replace('_', '/', $val));
$lastCharacter = substr($val, -1);
$val = substr($val, 0, -1);
switch($lastCharacter){
case 1:
$val = $val . "=";
break;
case 2:
$val = $val . "==";
break;
}
return $val;
}