2013-07-15 3 views
2

У меня есть этот простой скрипт: onclick='sharemusic("Say It Ain't So", "Weezer");'Спасаясь апострофа

Из-за апострофа на «не» это не работает должным образом. Как избежать апострофа, не влияя на функциональность кода?

Спасибо, куча!

+1

Не связывайте своих обработчиков таким образом, и вы можете вообще избежать проблемы! – Mathletics

+0

В вашем вопросе у вас уже есть апостроф, сбежавший с обратной косой чертой, что не работает? – Ajedi32

+0

скажите мне одну вескую причину, почему вам нужно связать ее в одинарных кавычках. –

ответ

4

Я не хотел добавлять этот ответ, потому что все остальные хорошие и будут более полезны большинству людей - отвечая на основной вопрос: «Как сбежать из Javascript внутри атрибутов HTML» - это не будет отвечать на этот вопрос ,

Некоторые рассмотрят следующее обходное решение, другие будут рассматривать его как единственное правильное решение ™.

Избавьтесь от апострофа пишущей машинки - хотя пишущие машинки классные и модные во всех своих ретро-величинах, мы можем сделать лучше, чем это, и пойти еще старше: Вернемся к правильному, одноразовому, типографическому апострофу (АКА «кудрявый апостроф»).

Как побочный эффект, это также будет фиксировать спасаясь проблему:

onclick="sharemusic('Say It Ain’t So', 'Weezer');" 

В печатники будут счастливы, и браузер будет счастлив. Ну, пока вы используете UTF-8, как и вам, или какую-либо другую кодировку, которая включает типографский апостроф. Unicode: U + 2019, entity: ’ или ’ (да, он разделяет свой код с правой одинарной кавычкой - но это все еще «правильный» апостроф).

Как упоминалось в комментариях, существуют различные библиотеки и плагины CMS/blog, которые помогают справиться с преобразованием в соответствующие типографские символы (и другие типографские тонкости). См wp-Typography, smartypants (который был, по-моему, первая реализация чего-то вроде этого - разработанный Джон Грубер, оригинальный автор Markdown) typogrify т.д.

Я не уверен, что, если таковые имеются, более поздние альтернативы есть, так как я давно сделал свою собственную (не публичную, я должен признать) реализацию C#.

+0

Спасибо за сообщение :) – seanlevan

+0

Как я уже сказал в комментариях, этот ответ потрясающий. Да, я знаю, что это не лучший метод, но он работает на 100% для того, что я пытаюсь сделать. Спасибо, бутон :) – seanlevan

2

Вы должны были бы использовать HTML-объекты, например:

onclick="sharemusic("Say It Ain't So", "Weezer");" 

Но, как уже говорили другие, вы, вероятно, не должны быть обязательными кликами этого пути (абстрактные ваши JS в его собственный файл и использование addEventHandler)

+0

Я знаю, что это можно сделать, мне просто интересно, могу ли я сделать это без преобразования сущностей. – seanlevan

1

Используйте следующий объект HTML.

onclick='sharemusic("Say It Ain't So", "Weezer");' 
+0

Не работает для меня ... – seanlevan

+0

@dfdf Извините, исправлено. – matt3141

3

Если вы абсолютно необходимо избежать его JavaScript, а не HTML-объект, вы можете записать его в это представление Unicode

"\u0027" // "'" 
"Say It Ain\u0027t So" // "Say It Ain't So" 

Вы можете выяснить, что представление Юникода является

"'".charCodeAt(0) // 39 
    .toString(16) // "27" 
// So pad 27 to 4 digits, then prepend \u 

Всегда полезно использовать объект HTML, как предлагается в MrJammin's answer при использовании HTML, поскольку он находится в HTML или полностью перемещая его из HTML. В противном случае вам нужно избежать всего, что может вызвать проблемы, например. все экземпляры & - \u0026, вместо того, чтобы просто делать гораздо более читаемый & и то же самое с другими стилями цитат.

1

Во-первых, используйте двойные кавычки для атрибута, как описано в стандарте.

Второй поместите ваши строки JS в одинарные кавычки и избегайте дополнительных одинарных кавычек с обратной косой чертой.

onclick="sharemusic('Say It Ain\'t So', 'Weezer');" 
+0

Хотя я также предпочитаю двойные кавычки для атрибутов, стандарт не описывает его. Все спецификации и рекомендации для HTML, XHTML и XML позволяют одинарные кавычки. – JimmiTh

2

Все это действительно хорошие ответы, которые зависят, почти полностью от обстоятельств вашего кода.

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

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

Если ваши данные поступают из внешнего источника и используются как для представления HTML, так и для использования во внешних системах, ответ Paul S. на сегодняшний день является самым портативным, поскольку HTML предназначены для HTML использовать только и, вероятно, придется переводить для внешних систем ... С другой стороны, Unicode имеет гораздо более широкую поддержку технологий.

Кроме того, как Павел С. ссылается на ... любые дополнения «предварительная обработка» значений JS на странице может привести к необходимости добавления дополнительных уровней кодирования. , , например, " становится " или 'Say It Ain\'t So' становится 'Say It Ain\\'t So' (или даже 'Say It Ain\\\\'t So', если все действительно сложно).

Смежные вопросы