字符 \n 和 \r 不会在 URL 中呈现为新行

Characters \n and \r are not rendered into new lines in a URL

{服务器url}/store?keyword=test1\ntest2\rtest3\r\ntest4

当前URL将关键字参数存入数据库, 但不知何故 \n 和 \r 字符不会呈现为新行。它们存储为 \n 和 \r.
但是当我使用 URL-编码时它起作用了。

\n - %0A
\r - %0D
{服务器 url}/store?keyword=test1%0Atest2%0Dtest3%0D%0Atest4

有谁知道到底发生了什么?

我找到了解释:

实际上 C、C++、Java 和许多其他语言允许反斜杠转义样式,从而改变 escape character to represent some control character/非打印字符后面的字符的含义,例如:

  • \n 换行
  • \r马车return
  • \t 选项卡
  • \b 退格
  • 等等

URL 和 URI 使用 percent-encoding 来引用具有特殊含义的字符,例如换行符、制表符、回车 return... 所以只要有一个 URL 中的 \n 将被视为与“n”连接的“\”。

在结果中,存储在数据库中的值将是一个“\n”序列,而不是预期的换行符。