PHP中的str_ireplace中单引号或双引号是否重要?

时间:2010-12-25 19:39:13

标签: php replace

我要用&替换换行符(\ 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"

为什么会这样?

1 个答案:

答案 0 :(得分:2)

因为只有转义的序列\'\\在单引号字符串中才有意义。
 请参阅documentation

  

要指定文字单引号,请使用反斜杠(\)对其进行转义。要指定文字反斜杠,请将其加倍(\\)。反斜杠的所有其他实例将被视为文字反斜杠:这意味着您可能习惯使用的其他转义序列(例如\r\n)将按字母顺序输出,而不是任何特殊意义。

<强>更新

另一个区别是PHP只有substitutes variables inside double-quoted strings (and heredoc)。因此,您可以考虑将单引号字符串的处理速度提高(但可能不会更快)。


顺便说一下,您不一定需要使用str_ireplace &+\n没有大写或小写版本。只有一个版本,因此str_replace就足够了。