PHP里redis的大坑:加号被转为空格
最近在PHP中使用js把图像的base64存入redis,取出来的时候发现无法正常显示图像。
试了无数次,javascript看来看去也没有问题,最终发现是redis的问题:加号全部被自动转为空格了。
(尚未仔细检查是否为PHP里的 $redis = new Redis(); 这个的问题,还是说这个是redis的原生问题,以后有时间再使用其他语言测试了)
如果是base64,解决方法很简单,PHP把空格替换回加号即可:
想起去年也是一模一样的情况,同样是浪费了我大量的时间。
特此记录下来,希望明年我不会再犯同样的错误……
补充:
使用VB.net测试了redis,1+1=2yes~!@#$%^&*()-+={}[]\|,./';:"<>?,, 这一串字符串进行redis的存入、取出,完全没有问题,加号、其他符号都是正常显示的,说明了这并非redis的原生问题,纯粹是PHP的 new Redis(); 的问题。WTF!!!!!
2024-08-01 继续补充:
以下是 AI 推荐的解决方法:
PHP 使用 URL 编码
在将数据存储到 Redis 之前,可以使用 urlencode
对数据进行编码,然后在读取数据时使用 urldecode
进行解码。这可以确保所有特殊字符都被正确处理。
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 存储数据时进行编码
$key = 'my_key';
$value = 'some+value';
$encoded_value = urlencode($value);
$redis->set($key, $encoded_value);
// 读取数据时进行解码
$stored_value = $redis->get($key);
$decoded_value = urldecode($stored_value);
echo $decoded_value; // 输出: some+value