PHP के base64_encode
लिनक्स base64
कमांड के लिए एक अलग स्ट्रिंग लौटा रहा है। यह क्यों है?PHP base64_encode और * nix base64
पीएचपी:
$ php
<?php
echo base64_encode('test');
?>
dGVzdA==
लिनक्स बेस 64:
$ echo 'test' | base64
dGVzdAo=
PHP के base64_encode
लिनक्स base64
कमांड के लिए एक अलग स्ट्रिंग लौटा रहा है। यह क्यों है?PHP base64_encode और * nix base64
पीएचपी:
$ php
<?php
echo base64_encode('test');
?>
dGVzdA==
लिनक्स बेस 64:
$ echo 'test' | base64
dGVzdAo=
echo
आमतौर पर स्ट्रिंग के अंत में एक नई लाइन चरित्र आउटपुट, कि -n
स्विच का उपयोग को दबाने के लिए: PHP के लिए इसी तरह
$ echo -n 'test' | base64
dGVzdA==
: आपके ब्राउज़र में
$ php
<?php
echo base64_encode("test\n");
?>
dGVzdAo=
एक गूंज कर जब यह मुझे देता है यह:
MacPro:~ bardiir$ echo 'test'
test
MacPro:~ bardiir$
मुझे लगता है कि चाहते हैं कि आप एक लाइन- शामिल हो सकता है यूनिक्स के रूप में यूनिक्स में समाप्त होने पर शायद एक न्यूलाइन कैरेक्टर संलग्न हो रहा है भले ही आप इसे बेस 64 एन्कोड पर पाइप करते हैं।
खुला कंसोल, टाइप atob('dGVzdAo=')
:
http://gyazo.com/68d16f666c394887929408c519ac1b23.png
आपके इनपुट में आपके अतिरिक्त चरित्र हैं। और वह 0x0A
(एलएफ) है।
+1 के बारे में कुछ नया सिखाए जाने के लिए +1। atob), वह मेरे लिए नया था। –
वैसे, यह फ़ंक्शन किसी भी मानक का हिस्सा नहीं है, इसलिए उत्पादन में इसका उपयोग करने के बारे में सोचें –
@ एम 28 ** ऑफटॉप **: यह मानक में है: http://www.whatwg.org/specs/ वेब-एप्स/वर्तमान-काम/मल्टीपाज/webappapis.html # एटोब और आईई के लिए आप उन दो कार्यों के साथ सरल लाइब्रेरी का उपयोग कर सकते हैं (कार्यान्वयन के बहुत सारे मौजूद हैं: [1] (http://closure-library.googlecode.com/svn /docs/closure_goog_crypt_base64.js.source.html), [2] (http://code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js?r=230), [3] (https://bitbucket.org/davidchambers/base64.js/src), [4] (https://gist.github.com/1284012))। – c69
ऐसा इसलिए है क्योंकि यूनिक्स संस्करण लाइन के अंत को भी एन्कोड करता है।
PHP में समान प्रभाव प्राप्त करने के लिए आप ऐसा ही कुछ करना होगा:
echo base64_encode('test'.PHP_EOL);
जो उत्पादन होगा: ideone.com/HorVD
संपादित करें:
dGVzdAo=
सबूत यहाँ देखें: जैसा चार्ल्स ने उल्लेख किया है, PHP_EOL
प्लेटफार्म-विशिष्ट है, इसलिए विंडोज़ पर उपरोक्त जांचने के लिए आप इसे लाइन प्रतीक के यूनिक्स-जैसे अंत के साथ प्रतिस्थापित करने के लिए:
echo base64_encode("test\n");
देखें, 'PHP_EOL' * प्लेटफार्म-विशिष्ट * और विंडोज़ पर अलग होगा। – Charles
@ चार्ल्स: धन्यवाद, मैंने आपके नोटिस के साथ अपना जवाब अपडेट किया। हालांकि यह अधिक अर्थपूर्ण होगा, क्योंकि वह लिनक्स के लिनक्स के 'बेस 64' के साथ लाइन के अंत को एन्कोड करता है, और प्लेटफ़ॉर्म के अंत में लाइन का उपयोग करना सबसे उपयुक्त होगा। मुझे आश्चर्य है कि, अगर विंडोज पर कुछ ऐसा संभव है (उदाहरण के लिए, PowerShell का उपयोग कर ?, शायद अलग वाक्यविन्यास के साथ, लेकिन इसके परिणामस्वरूप स्ट्रिंग को लाइन के अंत में संसाधित किया जा रहा है, लेकिन इस बार विंडोज़ 'एक)। – Tadeck
ऐसा लगता है कि [बेस 64ing किया जा सकता है] (http://blogs.msdn.com/b/powershell/archive/2006/04/25/583265.aspx) PowerShell में तारों पर। इस तथ्य से निर्णय लेते हुए कि यह एक विशिष्ट कमांड के आउटपुट के बजाय स्ट्रिंग पर काम कर रहा है, इसके बारे में चिंता करने के लिए * शायद * कोई खतरनाक न्यूलाइन नहीं है। – Charles
उपरोक्त लोगों के लिए समान है।
मैक ओएस एक्स में, बस इस परीक्षण:
$ echo 'test' | cat -e
test$
या,
$ echo -n 'test' | cat -e
test
और, गूंज आदेश के बारे में, टिप देख सकते हैं:
बिल्कुल सही, धन्यवाद! – psynnott
+1 के लिए +1 - यह मेरे लिए एक नया है –
+1 मुझे ''atob'] (https://developer.mozilla.org/en/DOM/window) के लिए echo – Peter