Имеет ли значение одинарная или двойная кавычка в str_ireplace в PHP? - PullRequest
0 голосов
/ 25 декабря 2010

Я должен заменить символ новой строки (\ 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 Ответ

2 голосов
/ 25 декабря 2010

Поскольку только экранированные последовательности \' и \\ имеют значение в одинарных строках в кавычках.
См. Документацию :

Чтобы указать одинарный литералцитата, убери его с обратной косой чертой (\).Чтобы указать буквальный обратный слеш, удвойте его (\\).Все другие экземпляры обратной косой черты будут обрабатываться как буквальная обратная косая черта: это означает, что другие escape-последовательности, к которым вы могли бы привыкнуть, такие как \r или \n, будут выводиться буквально, как указано, а не иметь никакого специального значения.

Обновление:

Другое отличие состоит в том, что только PHP заменяет переменные внутри строк в двойных кавычках (и heredoc) .Поэтому вы можете считать обработку строк в одинарных кавычках более быстрой (но, возможно, не измеримо более быстрой).


Кстати, вам не обязательно использовать str_ireplace как &, + и \n не имеют прописных или строчных букв.Существует только одна версия, поэтому str_replace будет достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...