Есть JS код, который формируется с помощью PHP, например так:
Код
<script type="text/javascript">
var city = [];
<?foreach($arCity as $key=>$sCity):?>
city[<?=$key;?>] = '<?=$sCity;?>'; // Например city[14] = '<div class="cc">Москва</div>
<?endforeach;?>
</script>
// P.S. Пример сильно упрощен, но общую суть передает
Поскольку этот код (JS) формируется с помощью PHP, то выводится он в template.php шаблона некоторого компонента. Проблема в том, что при валидации общего кода валидатор сообщает о том, что тегу <div> тут не место и засчитывает это за ошибку. Вопрос - как решить эту проблему?
А был ли мальчик? Вы правда делаете сайты для валидаторов, а не для людей? Если ответ отрицательный, то какое вам дело до бредовых сообщений валидатора, используйте его подсказки для выявления настоящих ошибок, типа не закрытого тега. А если уж совсем ни как, ну сделайте так '<di'+'v>' ну и так далее (можете вообще обфускатор использовать или на js-же создать нужный элемент, типа var div = document.createElement('div');
body.appendChild(div); ) - вряд ли у валидатора хватит интеллекта понять, что это такое, а у вас душенька будет спокойна, хотя еще раз вам уточню - вы обращаете внимание совсем не на то, что требует вашего внимания
Можете написать для чего вам массив $arCity. Этот массив выводится где то на странице? То есть как он формируется? и куда он затем выводится? Я так понимаю что вам нужно сохранить в JS:
Код
city[<?=$key;?>] = '<?=$sCity;?>';
То есть вам надо id => город.
Для того чтобы все было нормально сделайте вывод этого массива в html.
Ну про говно-код то вы загнули, вы же не знаете причины, зачем это делается, может от ботов скрыть контент или замаскировать блоки от парсинга, а вы сразу "гвонокод-говнокод"
На самом деле надо было допилить сайт за других разработчиков и провести его на валидаторе. Сильно заморачиваться с переделкой скрипта и шаблоне не хотелось, но и заодно стало интересно, как поступают бывалые в подобных ситуациях.
В итоге часть скрипта скрыл в <!-- --> а часть переделал, как указал Александр Назаров.
xdypx пишет: а json тут разве не упростит решение задачи, какой она не была бы?
Изначально и был json:
Код
var BIG_IMAGE = <?=json_encode($arResult["BIG_IMAGE"])?>;
На него жаловался валидатор, я решил, что такая конструкция решит ситуацию:
Код
var city = [];
<?foreach($arCity as $key=>$sCity):?>
city[<?=$key;?>] = '<?=$sCity;?>'; // Например city[14] = '<div class="cc">Москва</div>
<?endforeach;?>
Но и это валидатор распознал, как неуместный код. Вариант, предложенный Александром Назаровым действительно является наиболее удобным и правильным. Да и поисковики увидят всё содержимое страницы. На сколько я знаю пауки ПС не запускают JS.