当传递不带 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 says: 1+1 is 2, 10%40 is 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);
?>