PHP-переменная, объявленная через heredoc, не будет правильно анализироваться при вызове из сгенерированного PHP JavaScript - PullRequest
1 голос
/ 24 октября 2011

Переменная $a ниже, кажется, не анализируется должным образом, когда я пытаюсь объявить ее с помощью heredoc.Однако, он работает, когда я определяю его с помощью простого метода объявления =.Я хотел бы иметь возможность определить его как heredoc, потому что много HTML-кода должны вызываться все сразу, и в этом примере я только упростил его для демонстрационных целей.


$a = "<a href = \'http://www.google.com\'>Google</a>";

echo "
  <div id = \"test\" 
      ondblclick = \"document.getElementById('test').innerHTML = '$a';\">
        Change Event
  </div>
"; 

// when the user clicks the text "Change Event", 
// it should turn into whatever $a is, in this case a link to Google

Предыдущий код работает, однако, когда я пытаюсь преобразовать его в heredoc, что-то не анализируется правильно.


Я пытался использовать четыре вида стилей цитат, ", \", 'и \'

\ '- это стиль кавычек, требуемый тем, где переменная находится в коде, в JavaScript, так как остальные три стиля уже былииспользуется, и это цитата, которая работает (очевидно), когда я объявляю переменную простым (=) способом.

Когда я использую "или \" , код дает:

Screenshot

Когда я использую 'или \' , код выдает:

Screenshot2

В обоихВ некоторых случаях функциональность ondblclick также не работает.Я не уверен, что происходит не так и почему heredoc не выполняет синтаксический анализ так, как кажется.


Вот одна из моих попыток сделать heredoc;единственная разница между моими попытками заключается в стилях цитат вокруг ссылки.

$a = <<<EOT

    <a href = \'http://www.google.com\'>Google</a>

EOT;

// as stated above, I have tried ", \", ', and \'

Ответы [ 4 ]

2 голосов
/ 24 октября 2011

Хммм, пытаясь придумать способ обойти это, все еще используя heredoc ... двойные кавычки в .innerHTML должны быть экранированы при печати в браузере, или вы получите проблему, которая у вас есть.Некоторые браузеры будут добрыми и автоматически избегают их, но в целом этого не произойдет, и, по правде говоря, они не должны.

Единственный способ заставить этот код работать, это удалить ""из атрибута href полностью.

На самом деле не рекомендуется использовать .innerHTML таким образом, поскольку тег <a> теперь содержит технически инвазивный HTML, но, похоже, он работает в Firefox, IE 9 (режим приведения и выключения) и Chrome.

$a = <<<EOT
<a href=http://www.google.com>Google</a>
EOT;
$b = <<<EOT
<div id="test" ondblclick="document.getElementById('test').innerHTML = '$a';">Change Event</div>
EOT;
echo $b;
1 голос
/ 24 октября 2011

В PHP вам не нужно использовать echo для вывода строки.
Просто закройте тег PHP и напишите все, что вы хотите КАК ЕСТЬ, без единого синтаксического ограничения (если вы, конечно, следуете стандарту THML),открывать PHP только при необходимости.

?>
  <div id = "test"  
      ondblclick = "document.getElementById('test').innerHTML = '<?=$a>';"> 
        Change Event 
  </div> 

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

, если у вас по-прежнему возникают проблемы с кодом - ну, этобольше не вина PHP.Исправьте синтаксис dhtml.

(обратите внимание на цветовую подсветку, которая становится возможной, когда вы пишете (D) HTML как есть, без уродливого эха PHP)

1 голос
/ 24 октября 2011

Не избегайте ваших цитат.Сделайте что-то вроде этого:

<?php

$foo = "teststring";
$bar = <<<EOT
<a href="http://www.google.com/?q={$foo}">Click here</a>
EOT;

?>
0 голосов
/ 24 октября 2011

Это работает для меня:

<?php
$a = <<<EOT
<a href="http://www.google.com">Google</a>
EOT;
echo "
  <div id=\"test\" 
      ondblclick=\"document.getElementById('test').innerHTML = '$a';\">
        Change Event
  </div>
";

Так же, как это:

<?php
$a = <<<EOT
<a href="http://www.google.com">Google</a>
EOT;
$b = <<<EOT
<div id="test" ondblclick="document.getElementById('test').innerHTML = '$a';">Change Event</div>
EOT;
echo $b;

См. Эту кодовую панель для вывода .

...