Php base64和ruby不是相同的结果
我试图使用Base64将我的php代码转换成ruby,但它们不会给出相同的结果 PHP代码Php base64和ruby不是相同的结果,php,ruby,base64,Php,Ruby,Base64,我试图使用Base64将我的php代码转换成ruby,但它们不会给出相同的结果 PHP代码 <?php $user_basket = base64_encode( json_encode( array(array("My basket", "18.00", 2)))); echo $user_basket; ?> 然后我在ruby中尝试同样的事情 user_basket = Base64.encode64((([["My basket", "18.00", 2]]).to_jso
<?php
$user_basket = base64_encode( json_encode( array(array("My basket", "18.00", 2))));
echo $user_basket;
?>
然后我在ruby中尝试同样的事情
user_basket = Base64.encode64((([["My basket", "18.00", 2]]).to_json).gsub!(/\"/, '\''))
我之所以使用gsub,是因为添加了反斜杠
这是一种输出
"W1snTXkgYmFza2V0JywnMTguMDAnLDJdXQ==\n"
编辑:
问题在于to_json对话;
在php中,输出为
json_encode( array(array("My basket", "18.00", 2)))
>> [["My basket","18.00",2]]
红宝石
([["My basket", "18.00", 2]]).to_json
>> "[[\"My basket\",\"18.00\",2]]"
ruby添加了反斜杠,这就是我添加gsub以删除反斜杠的原因 Ruby的to_json
和PHP的json_encode
都没有在实际字符串中添加反斜杠。但是,在IRB中打印字符串时,反斜杠将添加到此显示的表示中,使其成为有值字符串。但是,它们不在实际字符串数据中
与@Neat在评论中所说的相反,Ruby也没有在JSON输出中添加单退。然而,对于您的原始代码,由于您正在用gsub!将所有文字双引号字符替换为一个单引号字符,因此会出现错误代码>
这种混淆可能源于您忘记了PHP版本中实际的json\u encode
调用。运行实际代码时,两个版本生成完全相同的字符串:
PHP> json_encode( array(array("My basket", "18.00", 2)));
# => "[[\"My basket\",\"18.00\",2]]"
RUBY> [["My basket", "18.00", 2]].to_json
# => "[[\"My basket\",\"18.00\",2]]"
因此,将字符串编码为base64时,结果也是相同的:
PHP> base64_encode( json_encode( array(array("My basket", "18.00", 2))));
# => "W1siTXkgYmFza2V0IiwiMTguMDAiLDJdXQ=="
RUBY> Base64.strict_encode64 [["My basket", "18.00", 2]].to_json
# => "W1siTXkgYmFza2V0IiwiMTguMDAiLDJdXQ=="
json\u econde()
和生成相同的字符串输出?我不熟悉ruby,但它不应该是。\u json.gsub!(
?看起来括号太多了?输出上的差异是因为ruby使用单引号,php使用双引号,以下是解码:php:[[“我的篮子”,“18.00”,2]
,ruby:[[[“我的篮子”,“18.00”,2]]
那么我如何用双引号替换单引号呢?我不明白ruby的是如何返回单引号的。正如json规范所说:值可以是双引号中的字符串,也可以是数字,也可以是真或假或空,或者是对象或数组。这些结构可以嵌套。
PHP> base64_encode( json_encode( array(array("My basket", "18.00", 2))));
# => "W1siTXkgYmFza2V0IiwiMTguMDAiLDJdXQ=="
RUBY> Base64.strict_encode64 [["My basket", "18.00", 2]].to_json
# => "W1siTXkgYmFza2V0IiwiMTguMDAiLDJdXQ=="