[英]Escaping quotes in a javascript object generated from PHP
我覺得這肯定是一個經常回答的問題的副本,但是我找不到解決我特定問題的答案。
我正在通過PHP從MySQL加載數據,包括一些字符串和一個JSON編碼的字符串。 該數據可能包含用戶輸入的特殊字符。
然后,我將這些數據合並到一個PHP數組中,然后對其進行json_encode
並使用JSON.parse
其讀入javascript。
我的問題是,這些字符串中的任何撇號都會中斷javascript,從而阻止JSON.parse
完成。
我認為可以通過三種方法解決此問題:
htmlspecialchars()
或類似方法),盡管在加載存儲為JSON字符串的數據時這會很困難(我想我可以對其進行解碼,然后遍歷並轉義每個元素中的特殊字符) ,然后重新編碼)。 我不得不說特殊字符編碼可能是Web開發中最令人沮喪的方面,因為它導致了很多意外錯誤,並且我難以理解不同的功能以及何時使用它們。
編輯:
var feedback = JSON.parse('{"721103":[{"sessionid":"45","feedback":{"praise":["","",""],"development":["","",""]}},{"sessionid":"46","feedback":{"praise":["Test","Test's",""],"development":["","",""]}}') ;
Test's
撇號打破了JavaScript
這樣可以防止您的JavaScript損壞:
var feedback = JSON.parse(`{"721103":[{"sessionid":"45","feedback":{"praise":["","",""],"development":["","",""]}},{"sessionid":"46","feedback":{"praise":["Test","Test's",""],"development":["","",""]}}]}`) ;
它使用``而不是''。 它們的作用相同,但不會互相影響。
我還糾正了您的json語法錯誤。
在存儲在數據庫中之前,請勿清除用戶數據。 取回后,您可以隨意調整它。
我假設您正在使用PHP的json_encode()函數來生成JSON編碼的字符串,在這種情況下,您可以使用JSON_HEX_APOS
選項將撇號編碼為\'
,例如:
json_encode( $a, JSON_HEX_APOS )
其中$a
是您的PHP數組。 這將產生一個沒有實際撇號的JSON字符串,您可以將其與撇號括起來以創建Javascript字符串:
echo "var feedback = JSON.parse('" . json_encode( $a, JSON_HEX_APOS ) . "')";
我嘗試使用有效的實際解決方案來編輯@kmoser的答案的嘗試在同行評審中被拒絕,所以這是可行的。 全部歸功於@kmoser:
$json_feedback = preg_replace( preg_quote('/\\u/\u0026#39;), '\\\\\\\\\\\\\\\\u\u0026#39;, json_encode( $feedback, JSON_HEX_APOS | JSON_HEX_QUOT ) );
當從MySQL數據庫檢索數據時,它通過用十六進制字符串替換單引號和雙引號來工作。 由於我不明白的原因,它仍然破壞了JavaScript,因此我做了一個preg_replace
,在轉義的代碼前加上了一個反斜杠。
請注意,為了說服preg_replace放入其他反斜杠以防止javascript中斷,我必須插入多少個反斜杠。 我也許可以用更少的反斜杠來擺脫,這里出現的數字主要是出於對這個愚蠢問題的無奈之舉!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.