Как передать разрывы строк из текстового поля через ajax в PHP

Я использую серверную часть WordPress, чтобы позволить клиенту заполнить форму и отправить содержимое текстовой области в электронном письме.

Моя проблема здесь в том, что когда я нажимаю кнопку «Отправить», строка из текстовой области преобразуется в Line1%0ALine2%0ALine3 (в результате encodeURIComponent ()) и отправляет ее в мою функцию PHP. Когда это отправляется по электронной почте, я получаю буквально то, что я получаю.

Я знаю, что мне нужно каким-то образом расшифровать / закодировать это, и я думаю, что почти готов.

Пока мой JS выглядит так.

tinyMCE.triggerSave();
var messagetext = jQuery('textarea#emailMessage').val();
var newEmailForm = [];
var email = jQuery('input.email').val();
var title = jQuery('input.title').val();
var emailMessage = encodeURIComponent(messagetext);
newEmailForm.push([email,title,emailMessage]);

var datastring = {
        newEmailForm: newEmailForm,
        properties: properties
    };

jQuery(function(){
        jQuery.ajax({
            type:'POST',
            data:{
                action: 'elegantSendEmail',
                datastring: datastring
            },
            url: ajaxurl,
            success: function(data){
                alert(data);
            }
        })
    })

Использование encodeURIComponent () отправляет текст сообщения следующим образом: Line1%0ALine2%0ALine3

Мой PHP Похоже.

function elegantSendEmail() {

  $to = $_POST['datastring']['newEmailForm'][0][0];
  $title = $_POST['datastring']['newEmailForm'][0][1];
  $messagetext = $_POST['datastring']['newEmailForm'][0][2], true);
  $properties = $_POST['datastring']['properties'];

  //Send the email and get a report back
  $sent = elegeantSend($to,$messagetext,$properties);

}

Я просто не знаю, как преобразовать строку в <br> или \n и т. д.

TIA

Что происходит после newEmailForm.push([email,title,emailMessage]);? Если вы отправляете данные через запрос POST AJAX, вызов encodeURIComponent() не требуется. Затем PHP автоматически и правильно анализирует данные в $_POST.

Stphane 13.03.2018 11:46

@Stphane Ive обновил фрагмент, включив в него оставшуюся функцию ajax. Вы заметите, что я также передаю второй массив.

Alex Knopp 13.03.2018 11:54

Почему вы используете объект и вложенный массив для включения данных? Попробуйте удалить encodeURIComponent, а затем поместите свои данные непосредственно в объект data, который вы передаете конструкции AJAX.

Stphane 13.03.2018 12:10

Разве urldecode('Line1%0ALine2%0ALine3'); в php не поможет?

Viney 13.03.2018 17:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
4
297
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы можете использовать str_replace

пример:

$messagetext = $_POST['datastring']['newEmailForm'][0][2], true);
$convertedMessageText = str_replace('%0A', "\n", $messagetext);

PS: это для замены %0A на новую строку (как вопрос), а не на другую

Это не работает. Он не заменяет все остальные элементы, такие как% 20, кавычки и т. д.

Alex Knopp 13.03.2018 11:55

Мой ответ на вопрос @AlexKnopp (%0A), если вы хотите еще один, опишите свой вопрос более подробно

Misbah 13.03.2018 12:40
Ответ принят как подходящий

Вы можете использовать функцию rawurldecode. Он будет декодировать в php, который закодирован с помощью encodeURIComponent ().

Другие вопросы по теме