2011-05-04 43 views
0

當我使用像行情問題傳遞價值爲Javascript

$myPage .= '<td><a href=\'javascript:editProduct(' 
    .$row['id'] 
    .',"' 
    .$row['name'] 
    .'")\'>Edit</a></td>'; 

其中$row['name']有它的價值的報價。它打破了。我如何解決從PHP方面和JS方面的問題...

$row['name']是來自DB的價值。它將具有價值像pradeep'spradeep"s

我用像

$myPage .= '<td><a href=\'javascript:editProduct('.addslashes($row['id']).',"'.addslashes($row['name']).'")\'>Edit</a></td>'; 

它解決了雙引號的問題。但是當我的價值有單引號javascrit鏈接看起來像

javascript:editProduct(28,"pradeep\ 

它實際上打破了..

,我如何剝離下來通過在JavaScript和addslashes加斜槓..

更新 - 最終代碼

$myPage .= '<td><a href=\'javascript:editProduct('.$row['id'].',"'.htmlentities($row['name'],ENT_QUOTES).'")\'>Edit</a></td>'; 

和js看起來像

function editProduct(id,name){ 
     alert(name); 
     } 

任何一個可以解決我的問題

+0

不知道我是否理解你的問題,但似乎你必須在使用它之前在'$ row ['name']'上引用引號。 – pconcepcion 2011-05-04 06:58:08

+0

不要忘記,單引號和雙引號不是這種類型代碼的唯一問題字符,您還需要轉義反斜線,回車符,換行符,換行符,也許製表符......(取決於關於你的數據,當然:你可能確定這些角色中的一些不會發生) – nnnnnn 2011-05-04 07:54:54

回答

1

嘗試:

$myPage .= "<td><a href='javascript:editProduct({$row['id']},\"" 
      . htmlentities($row['name']) 
      . "\")'>Edit</a></td>"; 

htmlentities默認行爲是單獨轉換雙引號,留下單引號,如果您需要將單雙引號,然後調用它像這樣:

htmlentities($row[ 'name' ], ENT_QUOTES) 

此外,使用{ .. }"..."字符串是正確的以替代變量的方式。

+0

@Oerd - 我想你沒有正確地得到我的問題。請再次看到我的問題。 – Hacker 2011-05-04 07:03:57

+0

@pradeep你是對的,我的觸發器太快了,那麼我想你的選擇是在'htmlentities'的調用中包裝'$ row ['name']''。 – Oerd 2011-05-04 07:10:00

+0

@pradeep,我更新了我的回答 – Oerd 2011-05-04 07:11:42

0

的PHP字符串

'<a href=\'javascript:editProduct('.$row['id'].',"'.$row['name'].'")\'>'; 

輸出(假設某些值)

<td><a href='javascript:editProduct(123,"abc")'></td> 

想必它打破,如果$行[ '名稱']中包含一個「報價。你可以更換這些報價與\「在輸出之前使用的字符串str_replace('"', '\"', $row['name'])

+0

Ÿ我不能使用addslashes而不是str_replace(「'」,「\'」,$ row ['name'])你已經使用 – Hacker 2011-05-04 07:09:10

+0

@pradeep addslashes也可以。我不喜歡它,因爲我不清楚任何與魔法引號有關的事情,但沒關係。 – boisvert 2011-05-04 08:44:15