Php base64 和 ruby 不是相同的结果
Php base64 and ruby are not the same result
我正在尝试使用 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]]
在ruby;
([["My basket", "18.00", 2]]).to_json
>> "[[\"My basket\",\"18.00\",2]]"
ruby 添加反斜杠,这就是我添加 gsub 以删除反斜杠的原因。
Ruby 的 to_json
和 PHP 的 json_encode
都没有向实际字符串添加反斜杠。但是,在 IRB 中打印字符串时,会在此显示的表示中添加反斜杠以作为有效字符串。然而,它们不在实际的字符串数据中。
与@Neat 在他的评论中所说的相反,Ruby 也没有在其 JSON 输出中添加 single-quites。但是,对于您的原始代码,将会存在,因为您要用 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=="
我正在尝试使用 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]]
在ruby;
([["My basket", "18.00", 2]]).to_json
>> "[[\"My basket\",\"18.00\",2]]"
ruby 添加反斜杠,这就是我添加 gsub 以删除反斜杠的原因。
Ruby 的 to_json
和 PHP 的 json_encode
都没有向实际字符串添加反斜杠。但是,在 IRB 中打印字符串时,会在此显示的表示中添加反斜杠以作为有效字符串。然而,它们不在实际的字符串数据中。
与@Neat 在他的评论中所说的相反,Ruby 也没有在其 JSON 输出中添加 single-quites。但是,对于您的原始代码,将会存在,因为您要用 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=="