Если вас интересует только решение, перейдите к последней строке.
Вот что в итоге произошло. У меня был тег div
в HTML, который содержал определенную информацию.
Когда пользователь нажимает кнопку, запускается код JS, который преобразует это div
в текстовое поле input
и устанавливает значение этого текстового поля в виде html исходного div - при замене всех вхождений <br>
на \n
создавать реальные разрывы строк.
Затем форма отправляется на сервер через ajax.
Когда я попытался заменить разрывы строк в PHP, ни одно из приведенных выше предложений не помогло по той простой причине, что это не было (как ни странно) «реальным» символом перевода строки. На сервер был передан литерал \n
.
Можно подумать, что экранирование обратной косой черты в \n
, как предлагает ghostdog74, решит проблему, но это не так. Я пытался избежать этого несколькими различными способами, но ничто не помогло.
Я закончил ссылками на какой-то старый материал для регулярных выражений и обнаружил, что:
Многие разновидности также поддерживают escape-последовательность \ Q ... \ E. Все символы между \ Q и \ E интерпретируются как буквенные символы. Например. \ Q * \ d + * \ E соответствует буквальному тексту \ d + . \ E может быть опущено в конце регулярного выражения ... Этот синтаксис поддерживается движком JGsoft, Perl, PCRE ... [source]
После этого вот код, который решил мою проблему:
$text = preg_replace('#[\Q\n\E]+#', "\n", $text);
Спасибо всем за помощь! +1 для всех:)