как правильно использовать кавычки в JavaScript - PullRequest
0 голосов
/ 01 ноября 2009

Я использую немного JavaScript, как это:

echo '<a href="javascript:playSong'."('$row[artist]','$row[title]','$row[sourcefile]')".'">';

Моя проблема в том, что иногда мои $row[artist] и $row[title] переменные содержат двойные qoutes.

Когда это происходит, он прерывает вызов функции javascript:playSong();.

Например, если строка была выведена так:

<a href="javascript:playSong('Danny Elfman','Beetlejuice Theme (Kamei Halloween Edit)','2009-10-31-10-52-01.4521.data','28330')">

Все будет хорошо.

Но иногда функция будет выглядеть так:

<a href="javascript:playSong('Danny Elfman','Beetlejuice "Theme" (Kamei Halloween Edit)','2009-10-31-10-52-01.4521.data','28330')">

Что заставило бы мой сайт думать, что команда заканчивается двойной кавычкой перед "Темой", и, таким образом, приводило к сбою.

Есть ли способ, которым я должен правильно цитировать мой javascript, чтобы он обрабатывал двойные кавычки внутри функции как текст, а не конец функции.

Я использую addslashes() и пробовал различные другие кодировки, но, похоже, ничего подобного не работает.

Ответы [ 3 ]

3 голосов
/ 01 ноября 2009

Лучшее решение здесь - перестать использовать href="javascript:… и начать использовать ненавязчивый JavaScript и прогрессивное улучшение .

Если вы хотите продолжить движение по этому маршруту, вам следует помнить, что вы имеете дело с тремя различными языками и генерируете один из другого в цепочке.

Начните с JavaScript. Затем заставьте это работать с HTML. Затем заставьте его работать с PHP.

javascript:playSong('Danny Elfman','Beetlejuice "Theme" (Kamei Halloween Edit)','2009-10-31-10-52-01.4521.data','28330')

Здесь нет синтаксических ошибок. У вас просто двойные кавычки в строке.

href="javascript:playSong('Danny Elfman','Beetlejuice "Theme" (Kamei Halloween Edit)','2009-10-31-10-52-01.4521.data','28330')"

Теперь вы вложили JavaScript в атрибут HTML, который разделен двойными кавычками. Это означает, что двойные кавычки в JS теперь являются проблемой, поскольку они заканчивают значение атрибута на полпути через сценарий.

Обработайте эти цитаты обычным для HTML способом. Замените их HTML-сущностью: &quot;

href="javascript:playSong('Danny Elfman','Beetlejuice &quot;Theme&quot; (Kamei Halloween Edit)','2009-10-31-10-52-01.4521.data','28330')"

Тогда перейдем к PHP:

echo '<a href="javascript:playSong'."('$row[artist]','$row[title]','$row[sourcefile]')".'">';

Работа с кавычками внутри кавычек внутри кавычек - это боль. Так что не пытайтесь.

href="javascript:playSong('<?php echo $row[artist] ?>','<?php echo $row[title] ?>','<?php echo $row[sourcefile]; ?>')"

Кажется, вы потеряли аргумент между примерами там.

Следуйте обычным правилам вставки контента в HTML с помощью PHP: htmlspecialchars

href="javascript:playSong('<?php echo htmlspecialchars($row[artist]); ?>','<?php echo htmlspecialchars($row[title]); ?>','<?php echo htmlspecialchars($row[sourcefile]); ?>')"
1 голос
/ 01 ноября 2009

Выход ONLY с обратной косой чертой не поможет вам, потому что вам также нужно экранировать их в html, попробуйте использовать &#39; для одинарных кавычек и &#34; для двойных кавычек во встроенных функциях js. 1005 *

Это должно делать то, что вам нужно.

Синан.

0 голосов
/ 01 ноября 2009

Редактировать: Ох. Вы должны избежать этого в html. Попробуйте htmlspecialchars :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...