簡體   English   中英

PHP在JS函數調用中的簡單引用

[英]Simple quote in PHP inside a JS function call

我已經閱讀了很多有關此問題的回復,但我沒有發現100%正確。

我希望在php中創建的代碼如下所示:

<a href="#" onclick="a_js_function('moduleSee.php','sql_restriction','popup')">See</a>

a_js_function()是一個內部javascript函數,它接收一些參數,將像這樣簡單地被調用

$str = '<a href="#" onclick="';
$str .= " a_js_function('moduleSee.php','sql_restriction','popup')";
$str .='">See</a>';

但是sql_restriction參數包含一個引號:

concat('000000',table_id)

而且,並非100%正常工作的解決方案是使用\\'代替' =>,這可以使SQL查詢正常運行,但會產生JavaScript錯誤,從而阻止了頁面的一部分。

$str = '<a href="#" onclick="';
$str .= " a_js_function('moduleSee.php','concat(\'000000\',table.id)','popup')";
$str .='">See</a>';

看看chrome怎么說:

未捕獲到的SyntaxError:意外的數字->指向接收到的參數的數目:concat('000000',table.id)

因為在000之間使用\\' receive ' ,js函數的參數會產生錯誤,而不是SQL。 避免在數字中使用引號使SQL查詢不起作用

放置'\\"\\\\'''也不起作用,既不添加addslashes()

有任何想法嗎?

問題不在於您如何轉義引號-反斜杠是正確的。 但是,發生的情況是您沒有進行足夠的轉義,因為每次代碼通過一種語言傳遞時,轉義都已完成,而下一種語言將不再可見。 編碼

$str = '<a href="#" onclick="';
$str .= " a_js_function('moduleSee.php','concat(\'000000\',table.id)','popup')";
$str .='">See</a>';

從php輸出為

<a href="#" onclick="
 a_js_function('moduleSee.php','concat('000000',table.id)','popup')
">See</a>

Javascript在concat中看到單引號,並嘗試結束字符串,然后被0(不是javascript關鍵字)所混淆。 您需要javascript才能看到以下內容

<a href="#" onclick="
 a_js_function('moduleSee.php','concat(\'000000\',table.id)','popup')
">See</a>

這是通過轉義php中的\\'字符來完成的,這意味着您的php需要看起來像

$str = '<a href="#" onclick="';
$str .= " a_js_function('moduleSee.php','concat(\\\'000000\\\',table.id)','popup')";
$str .='">See</a>';

我同意您應該對SQL服務器上的輸入進行一些處理。 您可以在該階段更正輸入。

您也可以嘗試在PHP中使用轉義的雙引號。 例如:

$str = '<a href="#" onclick="';
$str .= " a_js_function('moduleSee.php','concat(\"000000\",table.id)','popup')";
$str .='">See</a>';

Javascript可以在不使用concat函數的情況下進行連接,因此這應該可以工作:

a_js_function('moduleSee.php', '000000' + table.id, 'popup');

我不確定您的代碼是否在做特殊的事情來阻止上述代碼工作,但這對我有用。 我將table.id設置為25 ,所以結果顯示為: 00000025

感謝所有答案,最后我的老板解決了更改CMS核心的問題,在使用\\'00000 \\'之后進行過濾,使用replace()\\'更改為"

$_POST['fix'] = str_replace('\'','"', $_POST['fix'])); 

查詢效果很好,沒有js錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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