2010-09-14 66 views
1

我有如下代碼:找不到什麼是錯的語法

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'}) 

所以哪裏是我的錯?

謝謝!

+4

請顯示完成的呈現HTML代碼。在這種情況下,PHP源代碼沒有意義 – 2010-09-14 15:37:40

回答

1

正如warrenm指出的export是一個關鍵字,需要引用。

也就是說,改變PHP這樣的結果輸出爲:

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

你的PHP是這樣的:

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

(謝謝,彼得對改進語法)。

另外,你不妨的onclick後刪除空間:

onclick=" <?php 

將變爲:

onclick="<?php 
+0

是的,問題與日期有關。你可以請我在哪裏需要添加報價? – Ronny 2010-09-14 15:42:39

+0

@Ronny - 有道理? – 2010-09-14 15:52:52

+0

是的。謝謝! – Ronny 2010-09-14 15:57:27

4

export是一個關鍵字,所以看來IE的Javascript引擎是越來越迷茫你在這種情況下使用它。你可以把它放在引號中,以明確它是一個關鍵。

1

以供將來參考,您可能會發現更容易證明,如果你使用雙引號爲PHP字符串,大括號爲字符串中的數組元素閱讀:

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

simplified example of using curly bracket notation inside double quotes
(注你不需要轉義字面大寫的大括號)

此外,你應該使用json_encode()確保你的JSON是在正確的形式在:
(注意的onclick後的單引號,以適應雙引號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) . 
    ")"; 
?>' 

example

bobince,交有關JSON編碼選項。

1

這是馬虎的編碼,國際海事組織。保持模板格式與處理分開。

<?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 
+0

對於更復雜的事情是的。但將解釋的PHP與HTML混合使用的能力是使用完全有效利用PHP的PHP的優勢。 – 2010-09-14 16:14:32

+0

@Peter Ajtai:人們一直在說,但我認爲這是我們迷失方向的地方。將你的代碼從你的css和html中分離出來可以幫助你進行更改和測試安全性,而且如果你需要做一些改變,那麼不用去尋找它們就可以輕鬆完成這些改變。當然,如果你真的想要,你可以在模板中打印$ vars,但我更喜歡有一個像層蛋糕一樣的系統。沒有人接觸到糖衣。 (如果這對你有意義) – Geekster 2010-09-17 19:34:01

+0

@geekster - 我明白你在說什麼,但是你正在描述你想用PHP創建的新語言;) – 2010-09-17 20:01:41

2

+1 warrenm,它的export需要引用。

但這種事情不是好的形式。由於所有嵌套引用幾乎不可讀,並且因爲您沒有JavaScript字符串字面轉義或HTML轉義datePHP_SELF,所以您有HTML注入漏洞可能導致跨站點腳本安全漏洞。

決不輸出文本字符串HTML文本內容或屬性值不htmlspecialchars(),當你正在構建JS對象使用json_encode()創建輸出,因爲它會用繩子逃避問題和引用對象字面名稱爲你應付。

從PHP 5.3開始,JSON_HEX選項允許您確保將所有HTML特殊字符編碼爲JavaScript字符串文字轉義符,因此您不必在JSON編碼之上進行HTML編碼,這意味着您可以使用在事件處理程序屬性和<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); ?>);" 

還可以考慮從<script>打破了onclick處理程序,並分配給它,而不是使用內聯事件處理程序的屬性。這往往更具可讀性。