Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php base64和ruby不是相同的结果_Php_Ruby_Base64 - Fatal编程技术网

Php base64和ruby不是相同的结果

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

我试图使用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_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=="