почему jQuery пропускает код, если ‘

#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);