2015-11-22 40 views
0

我想让php在=之后但&之前编码。base64编码PHP中的GET变量

$actual_link = "$_SERVER[REQUEST_URI]"; 
$out = substr(strstr($actual_link, '?'), strlen('?')); 
$out = urlencode(base64_encode($out)); 
header('Location: http://'.$_SERVER[HTTP_HOST].'/workenv/img/create.php?'.$out.''); 

^编码整个字符串不是每一个。例如:

http://www.example.com/data.php?title=hi&apple=true 

是:

http://www.example.com/data.php?title=URLENCODEANDBASE64&apple=URLENCODEANDBASE64` 

回答

0

试试这个:

<?php 
$actual_link = "http://www.example.com/data.php?title=hi&apple=true"; 
$out = substr(strstr($actual_link, '?'), strlen('?')); 
$arr = explode('&', $out); 
for($i=0;$i<count($arr);$i++){ 
    $arr2 = explode('=', $arr[$i]); 
    $arr2[1] = urlencode(base64_encode($arr2[1])); 
    $arr[$i] = implode('=', $arr2); 
} 
$out = implode('&', $arr); 
echo $out; 
?> 
+0

谢谢您的时间和精力。 :) – StratHaxxs

+0

尽管这段代码可能会解决这个问题,但[代码解释](http://meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers)确实有帮助以提高您的帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性注释来挤占代码,这会降低代码和解释的可读性! – Rizier123

2

您可以轻松地php内置功能做到这一点:
parse_url打破的初始URL的元素,
parse_str打破向下查询字符串
http_build_query重建查询字符串

举例:

$url = 'http://www.example.com/data.php?title=hi&apple=true'; 

$parts = parse_url($url); 

var_dump($parts); 

/* will output 
array(4) { 
    ["scheme"]=> 
    string(4) "http" 
    ["host"]=> 
    string(15) "www.example.com" 
    ["path"]=> 
    string(9) "/data.php" 
    ["query"]=> 
    string(19) "title=hi&apple=true" 
} 
*/ 

parse_str($parts["query"],$qsArray); 
var_dump($qsArray); 
/* will output 
array(2) { 
    ["title"]=> 
    string(2) "hi" 
    ["apple"]=> 
    string(4) "true" 
} 
*/ 
foreach($qsArray as $key=>$value){ 
    $encodedArray[$key]=base64_encode($value); 
} 
var_dump($encodedArray); 
/*will output 
array(2) { 
    ["title"]=> 
    string(4) "aGk=" 
    ["apple"]=> 
    string(8) "dHJ1ZQ==" 
} 
*/ 
$encodedQS = http_build_query($encodedArray); 
// http_build_query will take care of the url encoding, see below 
var_dump($encodedQS); 
/*will output 
string(31) "title=aGk%3D&apple=dHJ1ZQ%3D%3D" 
*/ 

$parts["query"] = "?" . $encodedQS; // prepend the "?" to the query string 
$parts["scheme"] .= "://"; // append the :// bit to the scheme 
$encodedURL = implode('',$parts); 
var_dump($encodedURL); 
/*will output 
string(63) "http://www.example.com/data.php?title=aGk%3D&apple=dHJ1ZQ%3D%3D" 
*/