Разрыв строки в теле mailto: ссылка

Я хочу создать ссылку «Переслать другу» под сообщением в блоге, которое открывает мой почтовый клиент с готовым сообщением. Я могу заставить его работать для однострочного сообщения, но я хотел бы иметь возможность разбивать строки внутри тела сообщения. Как я могу это сделать?

<?php
printf(
'<a href="mailto:?subject=%s&body=%s">Forward this to a friend</a>',
the_title_attribute('echo=0'),
sprintf('The link: %s Have a great day! Stefaan', get_the_permalink())
);
?>

Как мне начать «Удачного дня!» На новой строке с пустой строкой выше?

Ссылка: …

Хорошего дня!

Stefaan

Мой блог использует WordPress с темой Genesis, и я поместил свой код в genesis_footer_entry подключить с включенным PHP (см. Скриншот — текст письма на голландском языке).

6

Решение

Вы не можете использовать теги HTML в тело из MAILTO

В соответствии с RFC 2368, это невозможно:

Специальное hname «body» указывает, что ассоциированное hvalue является
Тело сообщения. Hname «body» должно содержать содержимое для
первая текстовая / обычная часть сообщения. URL-адрес mailto
в первую очередь предназначен для генерации коротких текстовых сообщений, которые
фактически содержимое автоматической обработки (например, «подписка» на сообщения для списков рассылки), а не общие тела MIME.

Поэтому любое решение, зависящее от тегов HTML, невозможно.
Решение, которое я предлагаю, это использовать \ Г \ п наряду с функцией PHP rawurlencode

Так вот код

<?php

printf(
'<a class="simple-mail-link" href="mailto:x@y.com?subject=%s&body=%s"><div class="label"><div class="dashicons dashicons-admin-plugins"></div>Forward this to a friend</div></a>',
'My Subject',
rawurlencode(sprintf( "Hi there, this might be interesting for you.\r\nThis is the link: %s.\r\nHave a great day!\r\nStefaan", get_the_permalink()))
);

?>

Примечание: я пробовал код с заменой get_the_permalink () с переменным ношением http://example.com/test.php

Рекомендации:

MailTo с телом HTML

Что является эквивалентом JavaScript encodeURIcomponent в PHP?

3

Другие решения

объяснение

a mailto: Схема URI для адреса электронной почты, как и все другие URI, символы должны быть переведены в формат, который может быть передан через Интернет.

Возьмите упрощенную форму вашего исходного кода, чтобы проиллюстрировать пункты ниже

printf(<href="mailto:?subject=%s&body=%s">Description</a>, the_title_attribute( 'echo=0' ) , sprintf("content link:%s more content", get_the_permalink())

Код выполняется в следующих последовательностях

  1. get_the_permalink() получает URL вашей страницы
  2. sprintf() заменяет %s в $content с результатом шага 1
  3. print_f() затем заменяет
    я) первый %s то есть subject=%s с извлеченным результатом the_title_attribute( 'echo=0' )что я предполагаю
    название страницы или вашего сайта, а затем
    II) второй %s то есть body=%s с результатом шага 2, чтобы сформировать полный a mailto ссылка на сайт

Чтобы сохранить разрывы строк, вы должны преобразовать $content строка в URL-кодированную форму перед выводом.

В PHP это делается с помощью rawurlencode() функция, переводит переносы строк \r\n в строке в %0D%0A, согласно RFC 3986.

Поскольку знак процента % используется для спецификации преобразования в sprint_f(), вы должны передать строку rawurlencode() после того, как строка была отформатирована sprint_f()Поэтому использование rawurlencode(sprint_f($string, $arg))


Решение
Я собрал полное решение для вас, чтобы вы скопировали и вставили в ваш виджет, чтобы избежать ложного негатива из-за неправильной реализации.

Формат 1 и формат 2 содержат, по сути, один и тот же код, два формата служат для иллюстрации того, как можно вставить разрыв строки, либо на 1) pressing enter ИЛИ 2) typing in \r\n где разрыв строки необходим.

я сделал $content отдельная строка для вашего удобства редактирования и читабельности кода.

Формат 1

 <?php
//Start new line by pressing enter
//IMPORTANT NOTE: do not remove the %s
$content="Hi there, this might be interesting for you
This is the link: %s
Have a great day!
Stefaan
";
//No need to amend the code below
printf(
'<a class="simple-mail-link" href="mailto:?subject=%s&body=%s">
<div class="label">
<div class="dashicons dashicons-admin-plugins"></div>
Forward this to a friend</div></a>',the_title_attribute( 'echo=0' ),
rawurlencode(sprintf( $content,get_the_permalink()))
);
?>

Формат 2

<?php
//Start new line by adding \r\n
//IMPORTANT NOTE: do not remove the %s
$content="Hi there, this might be interesting for you\r\nThis is the link: %s\r\nHave a great day!\r\nStefaan";
//No need to amend the code below
printf(
'<a class="simple-mail-link" href="mailto:?subject=%s&body=%s">
<div class="label">
<div class="dashicons dashicons-admin-plugins"></div>
Forward this to a friend</div></a>',the_title_attribute( 'echo=0' ),
rawurlencode(sprintf( $content,get_the_permalink()))
);
?>

демонстрация

<a class="simple-mail-link" href="mailto:?subject=Page%20Title&amp;body=Hi%20there%2C%20this%20might%20be%20interesting%20for%20you%0D%0AThis%20is%20the%20link%3A%20http%3A%2F%2Fblahblahblah.com%0D%0AHave%20a%20great%20day%21%0D%0AStefaan"><div class="label"> <div class="dashicons dashicons-admin-plugins"></div>Forward this to a friend</div></a></body>
3

Согласно спецификации электронной почты, каждая строка электронной почты должна заканчиваться старой <CR><LF> пара — так что вам нужно использовать \r\n в sprintf() строка.

"This is the link: %s.\r\n Have a great day!\r\n Stefaan"

И если \r\n не работает, у вас есть ограничение исходного языка. При условии:

  • \r является ASCII 13 (шест 0D)
  • \n является ASCII 10 (шест 0A)

возможно, вы могли бы использовать "&#13;&#10;"?

2

Добавить еще %s аргумент вашей sprintf() позвоните и передайте ему URL-кодированную версию символа перевода строки %0A (дважды):

printf(
'<a class="simple-mail-link" href="mailto:?subject=%s&body=%s"><div class="label"><div class="dashicons dashicons-admin-plugins"></div>Forward this to a friend</div></a>',
'subject',
sprintf( 'Hi there, this might be interesting for you. This is the link: %s. %sHave a great day! Stefaan', "link-here", "%0A%0A" )
);

Редактировать:
Кроме того, вы также можете просто добавить %0A к самой строке, но вы должны помнить, чтобы избежать % char, добавив дополнительный перед ним:

printf(
'<a class="simple-mail-link" href="mailto:?subject=%s&body=%s"><div class="label"><div class="dashicons dashicons-admin-plugins"></div>Forward this to a friend</div></a>',
'subject',
sprintf( 'Hi there, this might be interesting for you. This is the link: %s. %%0A%%0AHave a great day! Stefaan', "link-here" )
);
0

Используйте строку в кодировке urlencoded для CR / LF

%0D%0A

где вы хотите отдохнуть.

В примере

<a
class="simple-mail-link"href="mailto:?subject=hello&body=Hello%0D%0A%0D%0AWorld!">
0

Я решил тщательно разобраться в проблеме и рассмотреть все попытки, которые были здесь сделаны. Если вы хотите быстрый ответ, посмотрите на принятый в настоящее время.

Чтобы использовать текст в mailto: URL body параметр, процентов закодировать Это. В PHP используйте rawurlencode(). Тема также должна быть закодирована.

$subj = "Whatever subject";
$body = "Multi-\r\nline\r\nbody";
printf(
"mailto:?subject=%s&body=%s",
rawurlencode($subj),
rawurlencode($body)
);
mailto:?subject=Whatever%2Osubject&body=Multi-%0D%0Aline%0D%0Abody

Чтобы использовать его как цель HTML-ссылка, заменить символы, которые имеют особое значение в HTML, ссылками на сущности — htmlspecialchars() для этого используется PHP, а в WordPress есть любитель (и фильтруемый) esc_html().

$subj = "Whatever subject";
$body = "Multi-\r\nline\r\nbody";
printf(
'<a href="%s">mailto: URL with multi-line body</a>',
htmlspecialchars(sprintf(
"mailto:?subject=%s&body=%s",
rawurlencode($subj),
rawurlencode($body)
), ENT_QUOTES)
);
<a href="mailto:?subject=Whatever%2Osubject&amp;Multi-%0D%0Aline%0D%0Abody">mailto: URL with multi-line body</a>
0

Вы могли бы добавить <br> тег в вашем sprintf (при условии, что вы хотите отобразить строку разрыва для HTML):

sprintf( 'Hi there, this might be interesting for you. This is the link: %s.<br> Have a great day!<br> Stefaan',get_the_permalink() )

РЕДАКТИРОВАТЬ:

Если вы хотите использовать текстовое письмо \r\n и двойные кавычки:

sprintf("Hi there, this might be interesting for you. This is the link: %s.\r\n Have a great day!\r\n Stefaan",get_the_permalink() )
-1

Вы могли бы, вероятно, забросить туда PHP_EOL

<?php
printf(
'<a class="simple-mail-link" href="mailto:?subject=%s&body=%s"><div class="label"><div class="dashicons dashicons-admin-plugins"></div>Forward this to a friend</div></a>',
the_title_attribute( 'echo=0' ),
sprintf( 'Hi there, this might be interesting for you. This is the link: %s. %sHave a great day! %sStefaan',get_the_permalink(), PHP_EOL, PHP_EOL )
);
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector