2015-11-22 1 views
0

J'essaye d'obtenir PHP pour encoder après = mais avant &.base64 encoder des variables GET en PHP

$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.''); 

^Qui encode la chaîne entière pas chacun. Par exemple:

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

SERAIT:

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

Répondre

0

Essayez ceci:

<?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

Merci pour votre temps et d'efforts. :) – StratHaxxs

+0

Alors que cet extrait de code peut résoudre la question, [y compris une explication] (http://meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers) sur le code aide vraiment pour améliorer la qualité de votre message. Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Essayez également de ne pas surcharger votre code avec des commentaires explicatifs, ceci réduit la lisibilité du code et des explications! – Rizier123

2

Vous pouvez facilement le faire avec php fonctions intégrées:
parse_url pour décomposer les éléments de l'URL initiale,
parse_str briser bas de la chaîne de requête et
http_build_query pour reconstruire la chaîne de requête

Exemple:

$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" 
*/