J'encode le suffixe URL de mon application:
$url = 'subjects?_d=1';
echo base64_encode($url);
// Outputs
c3ViamVjdHM/X2Q9MQ==
Remarquez la barre oblique avant "X2".
Pourquoi cela arrive-t-il? Je pensais que base64 ne produisait que A-Z, 0-9 et '=' comme rembourrage? J'ai essayé d'utiliser un encodeur en ligne base64 pour vérifier, et il semble que base64 le fasse toujours. Je ne peux pas dire si c'est le trait de soulignement "_" ou le point d'interrogation "?" ou le "=" peut-être?
Non. L'alphabet Base64 comprend A-Z, a-z, 0-9 et +
et /
.
Vous pouvez les remplacer si vous ne vous souciez pas de la portabilité vers d'autres applications.
Voir: http://en.wikipedia.org/wiki/Base64#Variants_summary_table
Vous pouvez utiliser quelque chose comme ceux-ci pour utiliser vos propres symboles à la place (remplacez -
et _
par tout ce que vous voulez, tant qu'il n'est pas dans l'alphabet de base base64, bien sûr!).
L'exemple suivant convertit le base64 normal en base64url comme spécifié dans RFC 4648 :
function base64url_encode($s) {
return str_replace(array('+', '/'), array('-', '_'), base64_encode($s));
}
function base64url_decode($s) {
return base64_decode(str_replace(array('-', '_'), array('+', '/'), $s));
}
En plus de toutes les réponses ci-dessus, soulignant que /
fait partie de l'attendu base64
alphabet, il convient de noter que la raison particulière pour laquelle vous avez vu un /
dans votre chaîne codée, parce que lorsque base64
encodage ASCII
texte, la seule façon de générer un /
est d'avoir un point d'interrogation dans une position divisible par trois.
Désolé, vous pensiez mal. A-Za-z0-9 ne vous donne que 62 caractères. Base64 utilise deux caractères supplémentaires, dans le cas de PHP /
et +
.
Il n'y a rien de spécial là-dedans.
Les "alphabets" ou "chiffres" de base 64 sont A-Z, a-z, 0-9 plus deux caractères supplémentaires + (plus) et/(barre oblique).
Vous pouvez ultérieurement encoder/avec% 2f si vous le souhaitez.
A-Z est de 26 caractères. 0-9 est de 10 caractères. = est un caractère. Cela donne un total de 37 caractères, ce qui est bien en deçà de 64.
/
est l'un des 64 caractères. Vous pouvez voir une liste complète sur la page wikipedia .
Pour base64, le jeu de caractères valide est: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /
le = est utilisé comme remplissage pour les derniers octets
M.
Pas directement lié, et suffisamment de personnes ci-dessus ont répondu et expliqué assez bien les solutions.
Cependant, sortir un peu du cadre des choses. Si vous voulez un texte de base lisible, essayez de regarder Base58. Cela vaut la peine de considérer si vous ne voulez que des caractères alphanumériques.