2011-10-06 46 views
2

我有stackoverflow幫助我在我的最後一個問題的JavaScript函數。該函數創建了一個div,然後將兩個表單輸入字段添加到新創建的div中。該函數有4個參數。其中之一是表單輸入字段的值。問題是如果單引號(撇號)在它打破函數的值。我正在開發PHP和使用jQuery。我嘗試了addslashes(),addcslashes($ text,''')和json_encode(),這些都適用於雙引號,但不是單引號。 。一個撇號的鏈路2原樣適用,以其 「蘇打」 值將引號傳入javascript函數

例:

<?php 
$text = "I'm Frustrated"; 
$text = addslashes($text); 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <style type="text/css"> 
     #item_box1{ 
      width: 300px; 
      margin: 0 auto; 
      height: 100px; 
      border: 1px solid blue 
     } 

     #item_box2{ 
      width: 300px; 
      margin: 0 auto; 
      height: 100px; 
      border: 1px solid red 
     } 
     .link-button { 
      color: rgb(0, 0, 255); 
      cursor: pointer 
     } 
    </style> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.3.js"></script> 
    <script type="text/javascript"> 
     function add_item(code, title, price, divbox) 
     { 
      var idtag, item_title, item_price, item_code; 
      // Generate an id based on timestamp 
      idtag = "div_" + new Date().getTime(); 
      // Generate a new div. 
      $(divbox).append("<div id=\"" + idtag + "\"></div>"); 

      if (divbox == "#item_box1") 
      { 
       item_title = $("<input/>", { 
        type: 'text', 
        name: "box1_item_title[]", 
        value: title 
       }); 

       item_price = $("<input/>", { 
        type: 'text', 
        name: "box1_item_price[]", 
        value: price 
       }); 
       // Show in the document. 
       $("#" + idtag).append(item_title, item_price); 
      } 
      else 
      { 
       item_code = $("<input/>", { 
        type: 'text', 
        name: "box2_item_code[]", 
        value: code 
       }); 

       item_title = $("<input/>", { 
        type: 'text', 
        name: "box2_item_title[]", 
        value: title 
       }); 
       // Show in the document. 
       $("#" + idtag).append(item_code, item_title); 
      } 
     } 
    </script> 
</head> 
<body> 
    <a class="link-button" onclick="return add_item('xyz', "<?php echo $text;?>", '45.99', '#item_box1');">Add Item to Box 1</a> 
    <br> 
    <a class="link-button" onclick="return add_item('123', 'Soda', '1.99', '#item_box2');">Add Item to Box 2</a> 
    <br> 
    <br> 
    <div id='item_box1'></div> 
    <div id='item_box2'></div> 

</body> 

頁面的源最終看起來像這樣:

回答

2

在鏈路1的onclick屬性,您正在使用內雙的轉義雙引號JavaScript字符串引用的HTML屬性。 onclick屬性最終設置爲return add_item('xyz',,而其餘的打開標記不是有效的HTML。將PHP標記周圍的雙引號更改爲單引號可以解決該問題。

得到的屬性定義將被
onclick="return add_item('xyz', 'I\'m Frustrated', '45.99', '#item_box1');"
我敢肯定,無論是HTML和JavaScript是有效的。

+0

該值可能有一個雙重報價以及單引號。所以這打破了它:$ text =「我是沮喪\」評級「; $ text = addslashes($ text); – David

+0

正如@staticsan指出的那樣,引號應該被編碼爲HTML實體。您可以通過在addslashes之前通過htmlspecialchars傳遞代碼來實現。 –

0

你在雙引號內封裝了一個單引號的字符串,所以你不需要添加斜槓。該代碼現在試圖逃避不需要轉義的角色。

要麼不加斜槓,或單引號內封裝,EG:

<a class="link-button" onclick="return add_item('xyz', '<?php echo $text;?>', '45.99', '#item_box1');">Add Item to Box 1</a> 
+0

但如果我使用雙引號則會中斷。 $ text =「I'm Frust \」rated「; $ text = addslashes($ text); – David

+0

如果你在屬性值周圍有雙引號,那麼嵌入的引號應該是HTML實體:" – staticsan

0

正如@Sam上面所說的,只是嘗試這樣做:

<a class="link-button" onclick="return add_item('xyz', '<?php echo $text;?>', '45.99', '#item_box1');">Add Item to Box 1</a> 

它應該工作的罰款。