Разница действительно в том, что в первом примере кода кавычка появляется в контексте, где нет переноса одинарных кавычек, поэтому нет никакой двусмысленности.Если бы вы обернули значения атрибута HTML одинарными кавычками (что также является допустимым HTML), у вас возникла бы проблема:
<?php $foo ="hey a quote ' "; ?>
<input type='text' value='<?php echo $foo; ?>' id='foo' />
В этом случае единственная кавычка должна была быть экранирована как сущность HTML: '
:
<?php $foo ="hey a quote ' "; ?>
<input type='text' value='<?php echo $foo; ?>' id='foo' />
Теперь во втором примере кода, который вы предоставили, одинарные кавычки будут отображаться в одинарных кавычках (для строкового литерала, переданного в alert
).Это проблема, потому что одиночная кавычка теперь будет end строковым литералом, а последующие символы приведут к синтаксической ошибке.
Здесь кавычка появляется в строковом литерале JavaScript (код alert
), а не в контексте HTML первого примера.В строковых литералах JavaScript одинарные кавычки можно экранировать с помощью обратной косой черты.
Так что в обоих случаях (HTML или JavaScript) вам может понадобиться экранирование.Они разные.
Обратите внимание, что все это не связано с PHP.