2011-06-07 89 views
48

我正在編寫一些使用PHP呈現的字符串的JavaScript代碼。我怎樣才能在我的PHP字符串中轉義單引號(只有單引號)?如何只轉義單引號?

<script type="text/javascript"> 
    $('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>'); 
</script> 
+8

你需要轉義多於單引號。換行,一個。你可能會用像'addcslashes($ mystringWithSingleQuotes,「'\」\ r \ n \\\ t \ 0 .. \ 37「)這樣的東西做得很好'' – 2011-06-07 17:27:24

+2

你可以用'json_encode()'來代替自己處理轉義一個有效的Javascript字符串(並刪除你的外部單引號) – mario 2011-06-07 17:29:17

+1

@Frank:你可以發佈你的答案作爲答案而不是評論嗎?評論中的正確答案不能被選擇,因此會產生假的「未答覆的問題」 – Sylverdrag 2011-06-07 17:33:59

回答

49

很簡單:echo str_replace('\'', '\\\'', $myString); 不過,我建議使用JSONjson_encode()功能會更可靠(例如引用新行):

<?php $data = array('myString' => '...'); ?> 

<script> 
    var phpData = <?php echo json_encode($data) ?>; 
    alert(phpData.myString); 
</script> 
+1

謝謝..我知道這一點,但我面臨的問題,因爲我試圖做'JSON.parse('<?php echo json_encode($ data );?>');'因爲數據中有單引號而失敗,後來我才知道在這裏沒有必要使用'JSON.parse' – 2015-01-16 12:00:59

+4

所有的回答都說'str_replace(「 '「,」\\'「,$ string)'和simi lar是不正確的。考慮字符串\'它將被\\替換,這會導致注入漏洞。正如Crozin所建議的那樣使用json_encode。 – 2012-10-11 00:50:59

+0

如果json擴展沒有安裝,json_encode會讓你陷入麻煩。閱讀我的解決方案下面使用strtr(..) – 2015-11-19 15:21:16

16
str_replace("'", "\'", $mystringWithSingleQuotes); 
9

只替換單引號,使用這個簡單的語句:

$string = str_replace("'","\\'", $string); 
+0

哇這解決了我的問題mgic_qoute – AlexJaa 2014-08-20 10:35:36

+0

我從Android「#039」得到不正確 – delive 2016-03-22 11:38:36

0

不知道你到底在幹什麼,你可以隨時嘗試:

$ string = str_replace(「'」,「%27」,$ string);

每當將字符串發送到數據庫進行存儲時,我都會使用它。 %27是'字符的編碼,如果在發送到服務器的字符串中包含單個'字符,它也有助於防止中斷GET請求。如果有人試圖手動發送一些數據到你的PHP函數,我會用JavaScript和PHP中的%27代替。爲了讓您的最終用戶更漂亮,只需對您從服務器獲取的所有數據運行逆替換函數,然後用'替換所有%27子字符串。

快樂注射避免!

0

這是我做到的。傻,但很簡單。

$singlequote = "'"; 
$picturefile = getProductPicture($id); 

echo showPicture('.$singlequote.$picturefile.$singlequote.'); 

我是工作在輸出HTML調用JavaScript代碼來顯示圖片...

1

後很長一段時間這個問題的戰鬥,我認爲已經找到了更好的解決方案。

結合使用兩個函數可以將字符串轉義爲HTML。

如果您在javascript函數調用中使用字符串,或者使用另一個函數 來避免雙引號,那麼可以使用單引號來避免簡單的引號。

解決方案:

mysql_real_escape_string(htmlspecialchars($string)) 

解決:

  • 創建呼叫JavaScript功能等

回聲 「的onclick =「javascript_f一個PHP油膏(\ ''。mysql_real_escape_string(用htmlspecialchars($字符串))」

9

在某些情況下,我只是把它轉換成實體:

      //i.e. $x= ABC\DEFGH'IJKL 
$x= str_ireplace("'", "&apos;", $x); 
$x= str_ireplace("\\", "&bsol;", $x); 
$x= str_ireplace('"', "&quot;", $x); 

HTML網頁,視覺輸出是一樣的:

ABC\DEFGH'IJKL 

然而, ,在源碼中進行了消毒處理

0

我寫了下面的函數,它取代了以下內容:

單引號[ ']用斜線和單引號[\']

反斜槓[\]以兩個反斜槓[\\]

function escapePhpString($target) { 
    $replacements = array(
      "'" => '\\\'', 
      "\\" => '\\\\' 
    ); 
    return strtr($target, $replacements); 
} 

您可以修改它以添加或刪除字符替換$ replacements數組。例如,要將\ r \ n替換爲「\ r \ n」=>「\ r \ n」和「\ n」=>「\ n」。

/** 
* With new line replacements too 
*/ 
function escapePhpString($target) { 
    $replacements = array(
      "'" => '\\\'', 
      "\\" => '\\\\', 
      "\r\n" => "\\r\\n", 
      "\n" => "\\n" 
    ); 
    return strtr($target, $replacements); 
} 

關於strtr的整潔特徵是它會更喜歡長時間的替換。 例如,「Cool \ r \ nFeature」將轉義\ r \ n而不是轉義\ n。

6

如果你想逃避與\如果你想逃避,單引號一樣的問題,你可以做你addcslashes()例如字符:

echo addcslashes($value, "'"); 

如果你想逃避'"\nul(字節空),可以使用addslashes()

echo addslashes($value); 
+1

感謝您指出[addcslashes](http://php.net/manual/en/function.addcslashes.php)轉義任意字符。 – 2017-04-30 15:31:04

0

我知道我遲到了。但你可以利用addcslashes函數來完成這項工作,

echo addcslashes($text, "'\\");