не могу найти, что не так в синтаксисе - PullRequest
1 голос
/ 14 сентября 2010

У меня следующий код:

onclick=" <?php echo 'postwith(\''.$_SERVER['PHP_SELF'].'\',{export:\'export\',date:\''.$_POST['date'].'\'})'; ?>"

, в то время как postwith является функцией.

в то есть у меня ошибка: Expected identifier, string or number

в Firefox это нормальнои ссылка:

postwith('/page/page.php',{export:'export',date:'Yesterday'})

так где моя ошибка?

спасибо!

Ответы [ 5 ]

4 голосов
/ 14 сентября 2010

export - ключевое слово, поэтому кажется, что движок IE Javascript запутывается, когда вы используете его в этом контексте.Вы можете поместить его в кавычки, чтобы было ясно, что это ключ.

2 голосов
/ 14 сентября 2010

+ 1 warrenm, это export, который нужно заключить в кавычки.

Но такие вещи не очень хорошая форма. Со всеми этими вложенными цитатами это едва читаемо, и поскольку у вас нет JavaScript-string-literal-escaped или HTML-escaped или date или PHP_SELF, у вас есть ошибки HTML-инъекции, которые могут привести к межсайтовому переходу. дыры в безопасности.

Никогда не выводите текстовую строку в текстовое содержимое HTML или значения атрибутов без htmlspecialchars(), и при создании объектов JS используйте json_encode() для создания выходных данных, поскольку они будут справляться с проблемами с выходом строки и заключать в кавычки имена литералов объектов для вы.

В PHP 5.3 опции JSON_HEX позволяют гарантировать, что все специальные HTML-символы закодированы как экранированные строковые литералы JavaScript, поэтому вам не нужно кодировать HTML поверх JSON-кодирования, что означает, что вы можете используйте одну и ту же функцию вывода как в атрибутах обработчика событий, так и в <script> блоках (которые, будучи CDATA, не имеют экранирования HTML).

<?php
    function j($o) {
        echo json_encode($o, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT);
    };
    $pars= array("export"=>"export", "date"=>$_POST['date']);
?>

onclick="postwith(<?php j($_SERVER['PHP_SELF']); ?>, <?php j($pars); ?>);"

Также рассмотрите возможность отключения обработчика onclick и назначения его из <script> вместо использования встроенных атрибутов обработчика событий. Это имеет тенденцию быть более читабельным.

1 голос
/ 14 сентября 2010

Это небрежное кодирование, ИМО.Храните форматирование шаблона отдельно от обработки.

    <?php
    // do processing of information

    $var = (((PSEUDOCODED DATA OUTPUT)));
    processtemplate($var);




    -------------
    //new file that is included by processtemplate()
?>
    ... blah ... blah ... blah ... blah 
    onclick="[[_KEYNAME_]]"
    ... blah ... blah ... blah ... blah ... blah 
1 голос
/ 14 сентября 2010

Для дальнейшего использования вам может быть проще прочитать корректуру, если вы используете двойные кавычки для строки PHP и фигурные скобки для элементов массива внутри строки:

onclick="<?php echo "postwith('{$_SERVER['PHP_SELF']}',
         {'export':'export','date':'{$_POST['date']}'})"; ?>"

упрощенный пример использования фигурных скобок в двойных кавычках
(обратите внимание, что вам не нужно избегать буквально визуализированных фигурных скобок)

Кроме того, вы должны использовать json_encode () , чтобы убедиться, что ваш JSON имеет правильный формат:
(обратите внимание на одинарные кавычки после щелчка для размещения двойной кавычки JSON)

onclick='<?php
    echo "postwith(\"{$_SERVER['PHP_SELF']}\"," .
    json_encode(array("export" => "export", "date" => $_POST['date']),
                JSON_FORCE_OBJECT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT) .
    ")";
?>'

пример

См. bobince , сообщение о параметрах кодировки JSON.

1 голос
/ 14 сентября 2010

Как указал Уорренм export - это ключевое слово, которое нужно заключать в кавычки.

То есть измените PHP так, чтобы результат получился:

postwith('/page/page.php',{'export':'export','date':'Yesterday'});

Ваш PHP будет выглядеть так:

onclick="<?php echo "postwith('{$_SERVER['PHP_SELF']}',
     {'export':'export','date':'{$_POST['date']}'})"; ?>"

(Спасибо, Питер за улучшенный синтаксис).

Также вы можете удалить пробел после щелчка:

onclick=" <?php 

станет:

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