кавычки в кавычках в кавычках

зверек

Новичок
кавычки в кавычках в кавычках

Кавычки будут сниться сегодня ночью :(

Помогите, пожалуйста, сделать работоспособным следующий фрагмент кода:


<body onload="window.parent.document.getElementById('folder_izdat_id').innerHTML='<img src=\'/img/i-red.gif\' onclick=\'window.open(\'/page.htm?action=rename&id=<?=$a?>\', \'_blank\' ,\'width=600,height=640\');\'> '">


попробовала упросить для отладки этот код и вместо конструкции window.open вставила alert.

<body onload="window.parent.document.getElementById('folder_izdat_id').innerHTML='<img src=\'/man/izdat/img/i-red.gif\' onclick=\'alert(\'!\')\'> '">

И как я поняла засада вся именно в кавычках, которые идут в алерте.
Если в alert вставляю некую php переменную например, которая идет без ковычек (alert(<?=$a?>) то вся конструкция срабатывает - появляется картинка при клике на которую выскакивает окошко с содержанием переменной.
Но нужно чтобы кавычки в кавычках срабатывали. Как быть?
 

DiMA

php.spb.ru
Команда форума
примерно так

<a onclick="alert(' \' &quote; '); eval('alert(&quote;\'&amp;&quote;&quote;)') ">

+нужно подумать головой и почитать о спец. символах в хтмл (это внутренность любого ХТМЛ атрибута) и яве
 

dimagolov

Новичок
а можно все оформить отдельной ф-ей и не страдать фигней:
<body onload="myOnLoad();">
 

DiMA

php.spb.ru
Команда форума
не обязательно

есть 2 функции: htmlspecialchars() + addslashesJS()

addslashesJS - нужно написать самому (всего 1 рег), она квотит все символы, чтобы любой текст можно было в двойые кавычки ява кода засунуть

используя эти функции, пхп легко нагенерит любой хтмл с явой в атрибутах
 

зверек

Новичок
Ну вобщем если сделать отдельной функцией, то кавычек меньше и все работает.
Спасибо всем большое за отзывы :)
 

dimagolov

Новичок
DiMA, далеко не тривиально понять (а главное предсказать результат) то, что происходит при обработке браузером HTML кода JS, который inline в теге. Потому что в начале оно парсером HTML обрабатывается, потом результат идет в JS и там обрабатывается интерпретатором. Без глубокого понимания как кавычки и прочее (к примеру угловые скобки и т.п) при этом будут интерпретироваться сделать все корректно вряд ли получится. Кроме того, полученный JS код в теге будет абсолютно не воспринимаемым при просмотре source страницы, да и с отладкой будут проблемы. А главное, в этом нет никакой необходимости, в подобном усложнении. JS надо выводить в теге script (при этом парсер HTML отдыхает), а inline оставлять только вызовы готовых ф-й.
 
Сверху