Методы Javascript автоматически экранируют кавычки? - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу знать, поддерживает ли javascript-метод авто-экранирование кавычек, потому что этот код работает:

Пример # 1

<?php $foo ="hey a quote ' "; ?>
<input type="text" value="<?php echo $foo; ?>" id="foo" />
<script>
    bar = document.getElementById('foo').value;
    alert(bar+'there is a quote, will it work? ,');
</script>

Отображается предупреждение,но этот:

Пример # 2

<?php $foo ="hey a quote ' "; ?>
<button onclick="alert('<?php echo $foo; ?>');">test</button>

... нет. Очевидно, , это потому, что кавычка не экранирована с помощью \.

Но опять же, как и в первом примере, так почему же это так?Метод javascript автоматически экранирует кавычки, когда выбирает что-то из DOM?

Или это просто метод value(), может быть?

Я ничего не нашел, так что если у вас есть даже началоответа буду рад.

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

PHP обрабатывается на сервере, генерируя HTML (включая встроенный JavaScript в этом случае). Это происходит до того, как HTML-код отправляется в браузер для интерпретации, включая любой JS.

При проверке сгенерированного исходного HTML-кода вы увидите, что ваш второй пример выглядит так:

<button onclick="alert('hey a quote ' ');">test</button>

, который не является допустимым синтаксисом JS.

Ваша первая версия работает в основном потому, что у вас нет лишних одинарных кавычек в коде, в который вставлена ​​строка PHP. Вместо этого вставка производит:

<input type="text" value="hey a quote ' " id="foo" />

что отлично. И это значение затем передается на вызов alert в JS.

0 голосов
/ 29 апреля 2019

Разница действительно в том, что в первом примере кода кавычка появляется в контексте, где нет переноса одинарных кавычек, поэтому нет никакой двусмысленности.Если бы вы обернули значения атрибута HTML одинарными кавычками (что также является допустимым HTML), у вас возникла бы проблема:

<?php $foo ="hey a quote ' "; ?>
<input type='text' value='<?php echo $foo; ?>' id='foo' />

В этом случае единственная кавычка должна была быть экранирована как сущность HTML: &apos;:

<?php $foo ="hey a quote &apos; "; ?>
<input type='text' value='<?php echo $foo; ?>' id='foo' />

Теперь во втором примере кода, который вы предоставили, одинарные кавычки будут отображаться в одинарных кавычках (для строкового литерала, переданного в alert).Это проблема, потому что одиночная кавычка теперь будет end строковым литералом, а последующие символы приведут к синтаксической ошибке.

Здесь кавычка появляется в строковом литерале JavaScript (код alert), а не в контексте HTML первого примера.В строковых литералах JavaScript одинарные кавычки можно экранировать с помощью обратной косой черты.

Так что в обоих случаях (HTML или JavaScript) вам может понадобиться экранирование.Они разные.

Обратите внимание, что все это не связано с PHP.

...