PHP里redis的大坑:加号被转为空格

最近在PHP中使用js把图像的base64存入redis,取出来的时候发现无法正常显示图像。

试了无数次,javascript看来看去也没有问题,最终发现是redis的问题:加号全部被自动转为空格了。

(尚未仔细检查是否为PHP里的 $redis = new Redis();  这个的问题,还是说这个是redis的原生问题,以后有时间再使用其他语言测试了)

如果是base64,解决方法很简单,PHP把空格替换回加号即可:

$pic = str_replace(" ", "+", $pic);
如果不是base64,那就麻烦大了,只能在存入redis之前把加号替换为某个特殊符号,从redis取出后再把特殊符号转化为加号。

想起去年也是一模一样的情况,同样是浪费了我大量的时间。

特此记录下来,希望明年我不会再犯同样的错误……

 

补充:

使用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

posted @ 2023-12-11 12:37  zzgreg  阅读(25)  评论(0编辑  收藏  举报