我如何只逃避单引号?

时间:2011-06-07 17:26:42

标签: php escaping

我正在编写一些使用PHP呈现的字符串的JavaScript代码。如何在PHP字符串中转义单引号(和单引号)?

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

11 个答案:

答案 0 :(得分:57)

非常简单:echo str_replace('\'', '\\\'', $myString); 但是,我建议使用JSONjson_encode()函数,因为它更可靠(例如引用新行):

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

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

答案 1 :(得分:19)

如果你想要使用\转义字符,例如你有addcslashes(),如果你只想逃避单引号,就像你可以做的那样:

echo addcslashes($value, "'");

如果您想要转义'"\nul(字节为空),您可以使用addslashes()

echo addslashes($value);

答案 2 :(得分:15)

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

答案 3 :(得分:9)

在某些情况下,我只是将其转换为ENTITIES:

                          //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
然而,它在源头上被消毒了。

答案 4 :(得分:8)

要仅替换单引号,请使用以下简单声明:

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

答案 5 :(得分:2)

我知道我迟到了。但是你可以利用addcslashes函数来完成这样的工作,

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

答案 6 :(得分:2)

使用原生函数htmlspecialchars它将从所有特殊的charector中逃脱。如果您想特别逃离quate,请使用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

输出就像这样

Jane &amp; 'Tarzan'<br>
Jane &amp; &#039;Tarzan&#039;<br>
Jane &amp; 'Tarzan'

在此处阅读更多内容,https://www.w3schools.com/php/func_string_htmlspecialchars.asp

答案 7 :(得分:1)

经过长时间的努力解决这个问题,我认为找到了更好的解决方案。

组合两个函数可以转义字符串以用作HTML。

如果你在javascript函数调用中使用字符串,那么可以转义双引号 另一个是逃避单引号,以避免那些围绕论证的简单引用。

<强>解决方案:

mysql_real_escape_string(htmlspecialchars($string))

<强>解决:

  • 创建一个用来调用像
  • 这样的javascript函数的php
  

回波   &#39;的onclick =&#34; javascript_function(\&#39;&#39; .mysql_real_escape_string(用htmlspecialchars($字符串))&#34;

答案 8 :(得分:0)

不确定您的数据到底在做什么,但您可以随时尝试:

$ string = str_replace(“'”,“%27”,$ string);

每当将字符串发送到数据库进行存储时,我都会使用它。 %27是'字符的编码,如果发送到服务器的字符串中包含单个'字符,它还有助于防止GET请求中断。我会在javascript和PHP中替换'%27,以防万一有人试图手动将一些数据发送到你的PHP函数。为了让最终用户更漂亮,只需对从服务器返回的所有数据运行反向替换功能,并用'替换所有%27子串。

快乐注射避免!

答案 9 :(得分:0)

我是这样做的。傻,但很简单。

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

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

我正在努力输出名为JavaScript代码的HTML以显示图片......

答案 10 :(得分:0)

我写了以下功能。它取代了以下内容:

单引号[']斜杠和单引号[\']

反斜杠[\],带有两个反斜杠[\\]

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

您可以修改它以在$ replacements数组中添加或删除字符替换。例如,要替换\ r \ n,它将变为“\ r \ n”=&gt; “\ r \ n”和“\ n”=&gt; “\ 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。