我要用&替换换行符(\ n)在一个字符串中,以便可以使用parse_str()将接收到的数据解析为数组。问题是,当我把\ n单引号时,它会以某种方式被替换为空格:
str_ireplace(array('&', '+', '\n'), array('', '', '&'), $response)
"id=1 name=name gender=gender age=age friends=friends"
但是当我把\ n放在双引号中时它就可以正常工作了:
str_ireplace(array('&', '+', "\n"), array('', '', '&'), $response)
"id=1&name=name&gender=gender&age=age&friends=friends"
为什么会这样?
答案 0 :(得分:2)
因为只有转义的序列\'
和\\
在单引号字符串中才有意义。
请参阅documentation:
要指定文字单引号,请使用反斜杠(
\
)对其进行转义。要指定文字反斜杠,请将其加倍(\\
)。反斜杠的所有其他实例将被视为文字反斜杠:这意味着您可能习惯使用的其他转义序列(例如\r
或\n
)将按字母顺序输出,而不是任何特殊意义。
<强>更新强>
另一个区别是PHP只有substitutes variables inside double-quoted strings (and heredoc)。因此,您可以考虑将单引号字符串的处理速度提高(但可能不会更快)。
顺便说一下,您不一定需要使用str_ireplace
&
,+
和\n
没有大写或小写版本。只有一个版本,因此str_replace
就足够了。