我试图通过使用Base64将我的PHP代码转换为ruby,但它们没有给出相同的结果;
PHP代码;
<?php
$user_basket = base64_encode( json_encode( array(array("My basket", "18.00", 2))));
echo $user_basket;
?>
输出;
W1siTXkgYmFza2V0IiwiMTguMDAiLDJdXQ==
然后我在ruby中尝试相同的事情;
user_basket = Base64.encode64((([["My basket", "18.00", 2]]).to_json).gsub!(/\"/, '\''))
我放了gsub,因为to_json
添加了反斜杠。
这个输出;
"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以删除反斜杠的原因。
答案 0 :(得分:2)
Ruby的to_json
而不是PHP json_encode
都没有向实际字符串添加斜杠。但是,在IRB中打印字符串时,在此显示的表示中添加反斜杠作为valud字符串。但它们不在实际的字符串数据中。
与之相反,@ Neat在他的评论中表示,Ruby也没有在其JSON输出中添加单一命令。但是,使用原始代码,因为您将所有文字双引号字符替换为带有gsub!
的单引号字符,所以会出现。
混淆可能源于您忘记PHP版本中的实际json_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=="