Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.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
为什么ruby控制器会逃避参数本身?_Ruby_Escaping - Fatal编程技术网

为什么ruby控制器会逃避参数本身?

为什么ruby控制器会逃避参数本身?,ruby,escaping,Ruby,Escaping,我正在为后端服务编写Ruby应用程序。有一个控制器可以接受来自前端的请求 在这种情况下,有一个GET请求,其参数包含字符“\n” “key”参数从AngularJs传递为“----BEGIN----n abcd\n----END----n”,但在Ruby控制器中,该参数实际上变成了“-BEGIN----n abcd\\n----END----n” 有人对此有好的解决方案吗?是的,这是因为ruby读取转义字符的方式。您可以在此处阅读说明: 我曾经遇到过这个问题,我只是使用了gsub将\\n更改为\

我正在为后端服务编写Ruby应用程序。有一个控制器可以接受来自前端的请求

在这种情况下,有一个GET请求,其参数包含字符“\n”

“key”参数从AngularJs传递为“----BEGIN----n abcd\n----END----n”,但在Ruby控制器中,该参数实际上变成了“-BEGIN----n abcd\\n----END----n”


有人对此有好的解决方案吗?

是的,这是因为ruby读取转义字符的方式。您可以在此处阅读说明:

我曾经遇到过这个问题,我只是使用了
gsub
\\n
更改为
\n
。你应该做的是:

def register
  begin
    request = {
      id: params[:key].gsub!("\\n", "\n")
    }
    .........
  end
end
请记住,您必须使用双引号
而不是单引号

Ruby中单引号字符串和双引号字符串的区别在于字符串定义表示转义序列的方式

在双引号字符串中,您可以编写转义序列,Ruby将输出它们的翻译含义。A\n将成为换行符。
但是,在单引号字符串中,转义序列被转义并返回其文字定义。A\n仍然是A\n。

AngularJs是否发送换行符或文字字符
\n
?后者将解释ruby为什么以您描述的方式显示它们。
def register
  begin
    request = {
      id: params[:key].gsub!("\\n", "\n")
    }
    .........
  end
end