簡體   English   中英

從 PHP 調用 javascript 函數 - 引號問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM