проблемы с htmlspecialchars - PullRequest
1 голос
/ 05 мая 2009

Я генерирую ссылки из следующего кода php. Ссылки отображаются в браузере, и сгенерированный HTML-код выглядит нормально, однако ссылки не доступны для кликов. Я проверил это в IE и FF и попытался увидеть с FireBug безрезультатно.

Код для генерации моей формы

$uploadhtml = htmlspecialchars(json_encode("<form action='up.php' method='post'
enctype='multipart/form-data'>
<label for='file'>Filename:</label>
<input type='file' name='file' id='file'/> 
<br />
<input type='hidden' name='pk' value='".$pk."'>
<input type='hidden' name='username' value='".$USERNAME."'>
<input type='submit' name='submit' value='Submit' onclick=\"setTimeout(function() { 
updateByPk('Layer2', '".$pk."', '".$brand."', '".$pg."'); } ),1250);\" />
</form>"), ENT_QUOTES);

Результирующий HTML-код:

    <a onclick="makewindows(&#39;&quot;<form action=&#39;up.php&#39; method=&#39;
post&#39;\r\nenctype=&#39;multipart\/form-data&#39;>\r\n<label for=&#39;
`file&#39;>Filename:<\/label>\r\n<input type=&#39;file&#39; name=&#39;file&#39; id=&#39;`file&#39;\/> \r\n<br \/>\r\n<input type=&#39;hidden&#39; name=&#39;pk&#39; value=&#39;
380118179930&#39;>\r\n<input type=&#39;hidden&#39; name=&#39;username&#39; value=&#39;
janmaybach&#39;>\r\n<input type=&#39;submit&#39; name=&#39;submit&#39; value=&#39;
Submit&#39; onclick=\&quot;setTimeout(function() { updateByPk(&#39;Layer2&#39;, 
&#39;380118179930&#39;, &#39;Ed Hardy&#39;, &#39;1&#39;); } ),1250);\&quot; 
\/>\r\n<\/form>&quot;&#39;); return false;" href="#">Upload files</a>

Полагаю, это ошибка JavaScript, но я не знаю, как ее точно определить?

edit: HTML-код без ENT_QUOTES:

<a href="#" onclick="makewindows('&quot;<form action='up.php' method='post'\r
\nenctype='multipart\/form-data'>\r\n<label for='file'>Filename:<\/label>\r\n<input 
type='file' name='file' id='file'\/> \r\n<br \/>\r\n<input type='hidden' name='pk' 
value='380118185183'>\r\n<input type='hidden' name='username' value='janmaybach'>\r
\n<input type='submit' name='submit' value='Submit' onclick=\&quot;setTimeout(function() 
{ updateByPk('Layer2', '380118185183', 'Ed Hardy', '1'); } ),1250);\&quot; 
\/>\r\n<\/form>&quot;'); return false;">Upload files</a>

Это все еще не кликабельно ..., кажется, все указано правильно?

Когда я пытаюсь без htmlspecial символов, получается следующий вывод html:

<input type='submit' name='submit' value='Submit' onclick=" settimeout(function()="" {="" updatebypk(="" layer2="" 380118179930="" ed="" hardy="" ,="" 1="" );="" }="" ),1250);="">
'); return false;"&gt;Upload files</a>

Ответы [ 3 ]

13 голосов
/ 05 мая 2009

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

Чтобы улучшить ситуацию, создайте отдельную страницу PHP с формой и откройте эту всплывающую ссылку - Javascript не требуется. Если вы действительно хотите избежать этой отдельной страницы любой ценой, по крайней мере, используйте функцию Javascript, которая генерирует форму в заголовке страницы (не динамическую), и чтобы ссылка содержала только вызов этой функции с вашими переменными как параметры.

1 голос
/ 05 мая 2009

Ваш флаг ENT_QUOTES портит вывод. Если вы посмотрите внимательно, вы увидите, что в выводе HTML нет реальных кавычек - только экранированные сущности. Сделайте тест, который не использует htmlspecialchars (). Вы должны избегать кавычек с помощью обратной косой черты ИЛИ еще лучше добавить ненавязчивую функциональность javascript. JQuery может помочь вам достичь этого http://jquery.com

1 голос
/ 05 мая 2009

Параметр в вашей функции makewindows не указан. Ваши кавычки экранированы (%#39). Замените его на ' и все готово.

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