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