當傳遞未經 base64 編碼的純文字字串時,別忘了將字串通過 urlencode() 處理,因為 PHP 會自動將傳遞字串中的所有實體進行 URL 解碼(因此所有 + 號會遺失,所有 % 實體會轉換為對應的字元)。
在這種情況下,PHP 嚴格遵守 RFC 2397。第 3 節指出,傳遞的資料應該以 base64 編碼或 URL 編碼。
有效用法
<?php
$fp = fopen('data:text/plain,'.urlencode($data), 'rb'); $fp = fopen('data:text/plain;base64,'.base64_encode($data), 'rb'); ?>
無效用法的示範
<?php
$data = 'Günther 說:1+1 等於 2,10%40 等於 20。';
$fp = fopen('data:text/plain,'.$data, 'rb'); echo stream_get_contents($fp);
$fp = fopen('data:text/plain,'.urlencode($data), 'rb'); echo stream_get_contents($fp);
$fp = fopen('data:text/plain;base64,'.base64_encode($data), 'rb'); echo stream_get_contents($fp);
?>