[英]calling javascript function from PHP - quotes issue
我正在嘗試從 PHP 調用 javascript 函數。 這個想法是創建的每個參數從文件鏈接,點擊輸入時,它的價值為文本框。
$lines = file('http://localhost/repositories.txt');
foreach ($lines as $line_num => $line) {
echo "<a onclick='javascript:(document.folderForm.folderLocation.value=".htmlspecialchars($line) .");' href='#'>".htmlspecialchars($line) . "</a><br />";
}
單擊我得到的創建的鏈接時(例如):
ReferenceError: test2 is not defined
我認為參數周圍應該有引號,但我無法添加它們。 我嘗試使用 ' \\" ' 沒有成功。有什么想法嗎?
您需要引用並正確轉義分配給輸入value
屬性的 JavaScript 字符串。 您可以為此使用json_encode
:
echo "<a onclick='document.folderForm.folderLocation.value=".htmlspecialchars(json_encode($line)) .";' href='#'>".htmlspecialchars($line) . "</a><br />";
問題的主要原因是您的代碼缺少字符串值周圍的引號,因此 JavaScript 將其解釋為標識符(變量名稱)。
json_encode
在值周圍添加引號,更重要的是,對值進行轉義以確保它是有效的 JSON 字符串(它轉義換行、回車和引號,否則很容易導致語法錯誤)。
JSON 是 JavaScript 語法的一個子集,因此任何有效的 JSON 都是有效的 JavaScript。 (前提是在合適的上下文中使用)
最后,由於該值位於 HTML 屬性內,因此仍會應用htmlspecialchars
來轉義該值。 它會轉義引號以確保變量值不會超出屬性值,並且還會轉義諸如&
字符,以免被解釋為 HTML 實體序列的開頭。
最后,在這種情況下,我建議不要使用echo
,以減少引號的數量並使插值更易於閱讀:
$lines = file('http://localhost/repositories.txt');
foreach ($lines as $line_num => $line) { ?>
<a onclick='document.folderForm.folderLocation.value=<?= htmlspecialchars(json_encode($line)) ?>;' href='#'><?= htmlspecialchars($line) ?></a><br />
<?php } ?>
注意:自 PHP 5.4 起,PHP 短回顯標簽隨處可用,與配置無關。 如果您需要支持 PHP < 5.4,請將<?=
切換到<?php echo
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.