2013-06-30 5 views
0

Я новичок в этом php + HTML5 + jquery mobile, пытаясь создать веб-приложение с подключением mysql.PHP escaping complex string in echo

Где-то по пути ... Я использую php-файл для создания файла HTML, содержащего 3 окна выбора, где пользователю нужно будет выбрать день месяца для продолжения. Я разработал страницу назначения с помощью javascript + HTML, все прошло хорошо, затем я повторил всю страницу в php-файле (которую я вызываю + обрабатываю, чтобы получить страницу). Проблема, которую я имею, заключается в том, чтобы убежать от строки, я полагаю. Я имею в виду, если я прокомментирую эти строки, страница работает (не так, как должно, но, по крайней мере, страница будет показана). Если я не комментирую их, JQuery показывает предупреждение, говоря «страницу Ошибка при загрузке»

HTML, который работает только штраф:

<html> 
<head> 
<title>Select</title> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js" /> 
</head> 
<body> 
<span id="day-select"> 
<select id="day"> 
<script type="text/javascript"> 
    function LastDayOfMonth(Year, Month) { 
    return new Date((new Date(Year, Month+1,1))-1); 
    }    
var nextmonth = new Date(); 
nextmonth.setHours(0, 0, 0, 0); 
nextmonth.setMonth(nextmonth.getMonth() + 1); 
var nextziua = nextmonth.getDate(); 
var ultimazidt = LastDayOfMonth(nextmonth.getFullYear(), nextmonth.getMonth()); 
var ultimazi = ultimazidt.getDate(); 
var ziuaselect = nextziua; 
var count = ultimazi; 
var ziua=1; 
while(ziua <= count){ 
    if(ziua == nextziua){ 
    document.write('<option value="'+ziua+'" selected="selected">'+ziua+'</option>'); 
    } 
    else{ 
    document.write('<option value="'+ziua+'">'+ziua+'</option>'); 
    } 
ziua++; 
} 
</script> 
</select> 
</span> 
<br><br> 
</body> 
</html> 

Итак, выше HTML-файл ... работает просто отлично, но когда я пытаюсь его от эха в PHP файл, все идет в ад прямо на этой линии:

document.write('<option value="'+ziua+'" selected="selected">'+ziua+'</option>'); 

Я имею в виду:

echo ' <html>'; 
echo ' <head>'; 
echo ' <title>Select</title>'; 
echo ' <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>'; 
echo ' </head>'; 
echo ' <body>'; 
echo ' <span id="day-select">'; 
echo ' <select id="day">'; 
echo ' <script type="text/javascript">'; 
echo ' function LastDayOfMonth(Year, Month) {'; 
echo ' return new Date((new Date(Year, Month+1,1))-1);'; 
echo ' }   '; 
echo ' var nextmonth = new Date();'; 
echo ' nextmonth.setHours(0, 0, 0, 0);'; 
echo ' nextmonth.setMonth(nextmonth.getMonth() + 1);'; 
echo ' var nextziua = nextmonth.getDate();'; 
echo ' var ultimazidt = LastDayOfMonth(nextmonth.getFullYear(), nextmonth.getMonth());'; 
echo ' var ultimazi = ultimazidt.getDate();'; 
echo ' var ziuaselect = nextziua;'; 
echo ' var count = ultimazi;'; 
echo ' var ziua=1;'; 
echo ' while(ziua <= count){'; 
echo ' if(ziua == nextziua){'; 
echo <<<EOT 
document.write('<option value="'+ziua+'" selected="selected">'+ziua+'</option>'); 
EOT; 
echo ' }'; 
echo ' else{'; 
echo <<<EOT 
document.write('<option value="'+ziua+'">'+ziua+'</option>'); 
EOT; 
echo ' }'; 
echo ' ziua++;'; 
echo ' }'; 
echo ' </script>'; 
echo ' </select>'; 
echo ' </span>'; 
echo ' <br><br>'; 
echo ' </body>'; 
echo ' </html>'; 

Таким образом, этот код генерирует содержимое поля SELECT, число дней 1-30, 1-31 или 1-29 в зависимости от месяца. Также он делает «выбранным» текущий день. Снова ... все идет хорошо, когда делаю это прямо в HTML, но когда я пытаюсь повторить его ... все останавливается. из-за этого документа пишут. Я попытался избежать одиночных кавычек или избежать двойных кавычек. Тот же результат. Вот почему я принял метод heredocs. Но, похоже, для моей проблемы все еще бесполезно. я обратил внимание на синтаксис heredocs: - без пробелов после

<<<EOT 
  • без пробелов после окончательного СРВ;

  • Последний (EOT;) находится на новой линии Тем не менее, ничего не работает. Может ли кто-нибудь сказать мне, что я делаю неправильно? Любая помощь будет оценена по достоинству. Спасибо

ответ

1

Я не вижу решения для этого «ускользающего экранированного» текста. Кроме того, я отделил HTML от PHP (кажется, широко известная и рекомендуемая практика). Таким образом, мой код выглядит так:

<?php 
$idviz = $_POST['idvisit']; 
// other php code 
?> 
<html> 
<head> 
.... 
</head> 
<body 
<!-- and now the html code for the page, and whenever I need parts/variables from php I just insert it in the middle of the HTML code using <?php $idviz; ?> or other variables--> 
</body> 
</html> 
+0

Хорошо, вы поняли, что это единственный правильный способ. –

+0

Меня интересовало решение для использования строки, которая имеет «и» внутри, и, кроме того, строка будет заключена в «или», чтобы быть полезной в синтаксисе, как в эхо. Если вы знаете, что я имею в виду ... К сожалению, я не видел решения для этого, и моя неудачная попытка использовать heredocs <<< не просветила меня. – user1137313

0

Добавить document.close(); перед тегом.

+0

Перед тем, как TAG? – user1137313

+0

/script tag .... – jeff

+0

Я решил это, удалив его из php. Я имею в виду, я отказался от использования эха для этого. Я просто остановил php, прежде чем HTML начнет с?> И снова запустится после него с помощью user1137313