[英]How do I escape only single quotes?
我正在編寫一些 JavaScript 代碼,該代碼使用用 PHP 呈現的字符串。 如何在我的 PHP 字符串中轉義單引號(並且只有單引號)?
<script type="text/javascript">
$('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
很簡單: echo str_replace('\'', '\\\'', $myString);
但是,我建議使用JSON和json_encode()
function 因為它會更可靠(例如引用新行):
<?php $data = array('myString' => '...'); ?>
<script>
var phpData = <?php echo json_encode($data) ?>;
alert(phpData.myString);
</script>
如果你想用\
轉義字符,你有addcslashes()
。 例如,如果您只想轉義像問題這樣的單引號,您可以這樣做:
echo addcslashes($value, "'");
如果你想轉義'
、 "
、 \
和nul
(字節空),你可以使用addslashes()
:
echo addslashes($value);
str_replace("'", "\'", $mystringWithSingleQuotes);
在某些情況下,我只是將其轉換為實體:
// i.e., $x= ABC\DEFGH'IJKL
$x = str_ireplace("'", "'", $x);
$x = str_ireplace("\\", "\", $x);
$x = str_ireplace('"', """, $x);
在 HTML 頁面上,視覺上的 output 是一樣的:
ABC\DEFGH'IJKL
但是,它在源頭上進行了消毒。
使用本機 function htmlspecialchars
。 它將逃避所有特殊字符。 如果您想專門從引用中逃脫,請與ENT_COMPAT
或ENT_QUOTES
一起使用。 這是示例:
$str = "Jane & 'Tarzan'";
echo htmlspecialchars($str, ENT_COMPAT); // Will only convert double quotes
echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES); // Converts double and single quotes
echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // Does not convert any quotes
output 將是這樣的:
Jane & 'Tarzan'<br>
Jane & 'Tarzan'<br>
Jane & 'Tarzan'
要僅替換單引號,請使用以下簡單語句:
$string = str_replace("'", "\\'", $string);
您可以使用addcslashes function 來完成此操作,如下所示:
echo addcslashes($text, "'\\");
經過長時間與這個問題的斗爭,我想我找到了更好的解決方案。
兩個函數的組合可以轉義一個字符串以用作 HTML。
一,如果您在 JavaScript function 調用中使用字符串,則轉義雙引號; 第二個轉義單引號,避免使用 go 圍繞參數的那些簡單引號。
解決方案:
mysql_real_escape_string(htmlspecialchars($string))
解決:
echo 'onclick="javascript_function(\''.mysql_real_escape_string(htmlspecialchars($string))"
我不確定你到底在用你的數據做什么,但你總是可以嘗試:
$string = str_replace("'", "%27", $string);
每當將字符串發送到數據庫進行存儲時,我都會使用它。
%27 是 ' 字符的編碼,如果發送到服務器的字符串中包含單個'
字符,它還有助於防止 GET 請求中斷。 I would replace ' with %27 in both JavaScript and PHP just in case someone tries to manually send some data to your PHP function.
為了使它對您的最終用戶更漂亮,只需對從服務器返回的所有數據運行反向替換 function 並將所有 %27 子字符串替換為'
。
避免注射快樂!
這是我的做法。 愚蠢,但簡單。
$singlequote = "'";
$picturefile = getProductPicture($id);
echo showPicture('.$singlequote.$picturefile.$singlequote.');
我正在輸出名為 JavaScript 代碼的 HTML 以顯示圖片...
我寫了以下function。 它取代了以下內容:
帶有斜杠和單引號 [\'] 的單引號 [']。
反斜杠 [\] 和兩個反斜杠 [\\]
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 而不是 escaping \n。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.