2010-04-28 4 views
1

Mes connaissances sur base64 sont assez limitées. Je l'utilise comme une alternative à l'échappement de chaînes dans un système de gestion de contenu, car j'avais été averti de la façon dont les faiblesses ont été trouvées dans mysql_real_escape_string(); et assez penaud, car je suis conscient de la façon dont il augmente la taille du texte.L'encodage Base64 en PHP ne fonctionne pas pour '&' et '#'?

PHP semble tronquer tout après une instance de # ou & dans la chaîne; aidez-moi s'il vous plaît hors de celui-ci.

De même, commentez si l'utilisation de base64 pour maintenir la 'justesse' du contenu de la publication dans le CMS est simplement retardée, ou un geste sage.

Merci pour votre temps :)

+1

Pourriez-vous peut-être inclure le code que vous essayez d'utiliser et d'avoir des problèmes avec? - De plus, notez que l'encodage en base64 augmentera la taille du texte encore plus que l'échappement, la plupart du temps. – Amber

+0

C'est juste un simple appel de base64_encode() à POST d'Ajax. Je pense maintenant, cependant, qu'il est provoqué en raison des esperluettes utilisées dans l'élaboration du contenu POST. – Angad

+1

Juste un heads-up re: l'étiquette de stackoverflow: Vous devriez essayer d'accepter une réponse (même si elle est la vôtre) quand votre question a été répondue. – pinkgothic

Répondre

2

Oui il fonctionne:

$ php 
<?php echo base64_decode(base64_encode("hello &# world")); ?> 
hello &# world 

vous pouvez trouver des informations sur base64 sur wikipedia et php manual

+0

Je vois, bon sang, j'aurais dû essayer ça moi-même. Donc les esperluettes dans la requête AJAX pourraient expliquer le problème, mais qu'en est-il de #? – Angad

+0

Les symboles '# 'sont utilisés dans les URLs de la partie ancre, donc ils sont un caractère réservé juste aimé & &. – Amber

+0

Je suis sûr que je ne vois pas quelque chose ici, mais comment les URL se glisseraient dans le contenu POSTed AJAX? Les esperluettes pourraient probablement déclarer les nouveaux éléments $ _POST [] et donc tronquer le reste de la chaîne (je pense). Je ne vois pas comment # ferait quelque chose de similaire? En outre, toutes les suggestions pour échapper à ces caractères, je ne veux pas compromettre en utilisant un texte fictif que je vais remplacer les deux façons. Est-ce qu'un caractère d'échappement est possible? Enfin, comment utiliser Base 64. Merci beaucoup pour votre temps. – Angad

1

Merci à tous, Dav avait raison sur toute la . Une fonction URLEncode simple que j'attrapé en dehors de Google a fait l'affaire :)

return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28'). 
                   replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+'); 

Merci encore :)