簡體   English   中英

如何只轉義單引號?

[英]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); 但是,我建議使用JSONjson_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("'",  "&apos;", $x);
$x = str_ireplace("\\", "&bsol;", $x);
$x = str_ireplace('"',  "&quot;", $x);

在 HTML 頁面上,視覺上的 output 是一樣的:

ABC\DEFGH'IJKL

但是,它在源頭上進行了消毒。

使用本機 function htmlspecialchars 它將逃避所有特殊字符。 如果您想專門從引用中逃脫,請與ENT_COMPATENT_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 &amp; 'Tarzan'<br>
Jane &amp; &#039;Tarzan&#039;<br>
Jane &amp; 'Tarzan'

閱讀更多內容 PHP htmlspecialchars() Function

要僅替換單引號,請使用以下簡單語句:

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

您可以使用addcslashes function 來完成此操作,如下所示:

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

經過長時間與這個問題的斗爭,我想我找到了更好的解決方案。

兩個函數的組合可以轉義一個字符串以用作 HTML。

一,如果您在 JavaScript function 調用中使用字符串,則轉義雙引號; 第二個轉義單引號,避免使用 go 圍繞參數的那些簡單引號。

解決方案:

mysql_real_escape_string(htmlspecialchars($string))

解決:

  • 為調用 JavaScript function 而創建的 PHP 行

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.

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