In de YUI 3 Gallery: Base64 en Y64-codering
06 juli 2010 om 09:39 door Nicholas C. Zakas | In Ontwikkeling | 5 ReactiesNicholas C. Zakas ( @ slicknet op Twitter) is de leidende frontend engineer op de Yahoo! homepage , een YUI bijdrage, en auteur van Professional JavaScript voor Web Developers en de onlangs vrijgelaten, High Performance JavaScript .
Base64 -codering was oorspronkelijk ontworpen om lossless data die tussen 8-bit en 7-bit systemen mogelijk te maken. Het belangrijkste voorbeeld van het gebruik ervan is in e-mail, die traditioneel gebruikt 7-bit systemen om de e-mail overdracht, terwijl die van ons thuis op onze computers werden met behulp van 8-bit systemen. Dit werd vooral belangrijk bij non-text e-mailbijlagen, die zou worden gecodeerd in MIME Base64 en meegezonden naar de bestemming.
Meer recent is base64-codering aan populariteit gewonnen voor het gebruik ervan in data URI's. Voor hen die geen idee, data URI's zijn een manier om bestanden binnen inbedding van HTML en CSS. Een van de ondersteunde data URI-indelingen is base64.
Base64-codering wordt nog steeds veel gebruikt bij het programmeren, vooral voor verwarring, maar ook voor veilig datatransport. Terwijl sommige browsers hebben inheemse base64-codering en-decodering, deze functionaliteit is niet gedefinieerd in elke standaard of algemeen verkrijgbaar in alle browsers. De YUI drie Gallery Base64 module biedt een gemeenschappelijke uitvoering van de base64-codering die gebruikt kunnen worden in alle A-grade browsers. Om gebruik te maken van de Base64-module, de volgende op uw pagina:
<script src="http://yui.yahooapis.com/3.1.0/build/yui/yui-min.js"></script> <script> YUI({ gallery: 'gallery-2010.06.16-19-51' }).use('gallery-base64', function(Y) { //your code here }); </script> De Base64 module blootstelt een Base64 object met twee methoden: encode() en decode() . De methoden worden als volgt gebruikt:
var decodedText = Y.Base64.decode(encodedText); var encodedText2 = Y.Base64.encode(rawText); Samen met de Base64-module, ik schreef ook een Y64 module . Y64 is een base64 variant gebruikt bij Yahoo als base64-informatie moet worden uitgezonden als deel van een GET-aanvraag. Reguliere base64 heeft drie karakters die niet URL-safe: plus (+), slash (/), en is gelijk aan (=). (.) Y64-codering vervangt deze met stip, underscore (_), en het streepje (-), respectievelijk. Dit maakt Y64-gecodeerde strings te worden geplaatst in URL's zonder zorgen te maken over URL ontsnappen van de personages.
De Y64 module vereist de Base64-module, die automatisch wordt getrokken in wanneer u de volgende code:
YUI({ gallery: 'gallery-2010.06.16-19-51' }).use('gallery-y64', function(Y) { //your code here }); De Y64 module blootstelt een Y64 object met encode() en decode() methoden, zodat het gebruik is hetzelfde als met de Base64 object:
var decodedText = Y.Y64.decode(encodedText); var encodedText2 = Y.Y64.encode(rawText); Als u van plan bent op het slagen base64 gecodeerde gegevens in een URL-tekenreeks, kunt u Y64 beschouwen als een alternatief.
Houd er rekening mee dat base64 en Y64 niet encryptie-algoritmen. Encryptie-algoritmen zijn ontworpen om gegevens van nieuwsgierige ogen veilig te stellen. Base64 en Y64 zijn encoding algoritmes ontwikkeld om gegevens te verzenden zonder het risico van data corruptie - de aard van de corruptie die er gebeurt wanneer gegevens worden overgedragen van het ene systeem naar het volgende en kan worden gecodeerd en gedecodeerd in veel verschillende formaten voor aankomst op de eindbestemming.
Een goed voorbeeld hiervan is link-sharing-functionaliteit. Stel dat je een koppeling te delen door het passeren aan een entrypoint, zoals http://www.example.com?share=<url> . De url moet URL-gecodeerd voor veilige overdracht, maar dat de URL zelf kan ook bevatten URL-gecodeerde gegevens. En geloof het of niet, soms browsers kan mis-gecodeerde URL's vóór verzending (het is zeldzaam, maar niet ongehoord). Voor een hoger niveau van vertrouwen dat de gegevens komt in goede vorm, kunt u gebruik maken Y64 codering:
var destination = "http://www.example.com?share=" + Y.Y64.encode(url); De bestemming zou dan decoderen van de URL-waarde. Omdat deze waarde niet zal URL-codering vereisen, de kansen van de gegevens beschadigd raken tijdens de overdracht worden verminderd.
Niet iedereen zal moeten base64 of Y64-codering gebruiken in hun webapplicaties, maar deze kan zeer krachtige tools om in je achterzak.
Verder lezen:
Delen en uit te breiden: Bookmark met del.icio.us | digg it! | reddit!
5 Reacties
Sorry, het reactieformulier op dit moment gesloten.

Copyright © 2006-2011 Yahoo Inc All rights reserved. Privacy Policy - Gebruiksvoorwaarden
Aangedreven door WordPress op Yahoo! Web Hosting .


U gebruikt een schakelaar per karakter ... dat is een vrij verschrikkelijk. Ik schreef en postte een voorbeeld een paar jaar terug:
Eenvoudige Base64 coderen / decoderen - Javascript
Merk op dat met een kleine tweak om de anonieme constructorfunctie, kunt u een even efficiënte Y64 functies te genereren.
Voel je vrij om opnieuw te gebruiken wat je wilt.
Reactie door Preston L. Bannister - 06 juli 2010 #
Het artikel vermeldt dat u een data-URI gebruiken om bestanden te verankeren binnen het HTML-document. Betekent dit module ondersteuning die functionaliteit (over A-grade browsers)?
Reactie door Sause - 06 juli 2010 #
Ter verduidelijking, bent u met dezelfde conventies in Y64 als Base64 voor URL ? Het vertaalt "+" => "-" maar dit bericht suggereert dat Y64 is het vertalen van "+" => ".". Ook Base64 voor URL weglaat "=" voor opvulling.
Reactie door Michael Sheakoski - 06 juli 2010 #
@ Sause - deze module is voor base64-codering alleen. Gegevens URI functionaliteit is iets dat ingebouwd in de browser (of niet!), En dus is deze module kan niets doen ter ondersteuning van browsers die geen native ondersteunen hen te helpen.
Reactie door Nicholas C. Zakas - 07 juli 2010 #
@ Michael - Y64 is niet hetzelfde als Base64 voor de URL. Zoals vermeld in de post, Y64 is een variant hebben we op met behulp van Yahoo voor een tijdje. Het is niets erg revolutionair, maar wel bereikt hetzelfde doel van passerende base64 gecodeerde data in een URL.
Reactie door Nicholas C. Zakas - 08 juli 2010 #