#javascript #jquery #html #mailto #reserved-words
#javascript #jquery #HTML #mailto #зарезервированные слова
Вопрос:
Я пытаюсь создать кнопку mailto, где она создает заголовок и текст электронного письма.
Мой код выполняет свою работу правильно, но я понял, что если буква ‘amp;’ находится в тексте, то остальная часть кода пропускается. таким образом, строка видна до ‘amp;’, и ничего после этого не будет в теле письма.
Взгляните на пример: jsFiddle
var title = "my track title";
var artist= "ArtistA amp; Artist B";
var trackURL= " http://localhost/music";
var subjectText = title " by " artist;
var bodyText = "Check out the track " title " by " artist " on " trackURL;
var url = 'mailto:' '' '?subject=' subjectText 'amp;body=' bodyText;
$(".email").on("click tap", function(event) {
event.preventDefault();
window.location = url;
});
console.log(url);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="email">Send Email</button>
В консоли он отображается правильно, но если вы нажмете кнопку и откроете ее в почтовом приложении, вы увидите, что текст похож на: Check out the track my track title by ArtistA
, а остальное отсутствует.
Если я меняю ‘amp;’ на ‘и’, он работает правильно и показывает: Check out the track my track title by ArtistA and Artist B on http:/localhost/music
Есть идеи, как это исправить? я пытался .toString()
, но не сработало.
Комментарии:
1. Вам нужно urlencode ваших строк.
2. «почему jQuery пропускает» — jQuery ничего не пропускает. Часть вашего кода, которая создает и использует
url
переменную, является обычным JS, но JS также не пропускает, учитывая, что это проблема с кодировкой URL.
Ответ №1:
Это потому amp;
, что это символ-разделитель параметров url.
Вам нужно закодировать свои значения ( encodeURIComponent
для текстов и encodeURI
для URL), прежде чем добавлять их в строку url.
var title ="my track title";
var artist= "ArtistA amp; Artist B";
var trackURL= " http://localhost/music";
var subjectText = encodeURIComponent(title " by " artist);
var bodyText = encodeURIComponent("Check out the track " title " by " artist " on ") encodeURI(trackURL);
var url = 'mailto:' '' '?subject=' subjectText 'amp;body=' bodyText;
$(".email").on("click tap", function(event) {
event.preventDefault();
window.location = url;
});
console.log(url);