Я использую серверную часть 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
@Stphane Ive обновил фрагмент, включив в него оставшуюся функцию ajax. Вы заметите, что я также передаю второй массив.
Почему вы используете объект и вложенный массив для включения данных? Попробуйте удалить encodeURIComponent, а затем поместите свои данные непосредственно в объект data, который вы передаете конструкции AJAX.
Разве urldecode('Line1%0ALine2%0ALine3'); в php не поможет?






вы можете использовать str_replace
пример:
$messagetext = $_POST['datastring']['newEmailForm'][0][2], true);
$convertedMessageText = str_replace('%0A', "\n", $messagetext);
PS: это для замены %0A на новую строку (как вопрос), а не на другую
Это не работает. Он не заменяет все остальные элементы, такие как% 20, кавычки и т. д.
Мой ответ на вопрос @AlexKnopp (%0A), если вы хотите еще один, опишите свой вопрос более подробно
Вы можете использовать функцию rawurldecode. Он будет декодировать в php, который закодирован с помощью encodeURIComponent ().
Что происходит после
newEmailForm.push([email,title,emailMessage]);? Если вы отправляете данные через запрос POST AJAX, вызовencodeURIComponent()не требуется. Затем PHP автоматически и правильно анализирует данные в$_POST.