我如何只逃避单引号?

And*_*rew 64 php escaping

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

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

Cro*_*zin 62

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

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

<script>
   var phpData = <?php echo json_encode($data) ?>;
   alert(phpData.myString);
</script>
Run Code Online (Sandbox Code Playgroud)

  • 所有说'str_replace("'","\\'",$ string)和类似的答案都是不正确的.考虑字符串\'它将替换为\\',这将导致注入漏洞.而是使用json_encode作为Crozin建议. (5认同)
  • @BasilMusa 自 PHP 5.2 起,JSON 扩展默认捆绑([source](http://php.net/manual/en/json.installation.php)),所以我不会担心。 (2认同)

Pho*_*ixS 19

如果你想逃离一个字符\,你有addcslashes(),如果你想逃避,单引号一样,你可以做些什么的问题,例如:

echo addcslashes($value, "'");
Run Code Online (Sandbox Code Playgroud)

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

echo addslashes($value);
Run Code Online (Sandbox Code Playgroud)


Jul*_*ian 16

str_replace("'", "\'", $mystringWithSingleQuotes);
Run Code Online (Sandbox Code Playgroud)


T.T*_*dua 10

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

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

在HTML页面上,视觉输出是相同的:

ABC\DEFGH'IJKL
Run Code Online (Sandbox Code Playgroud)

但是,它在源头上被消毒了.


Nis*_* Up 9

使用本机功能htmlspecialchars。它将摆脱所有特殊字符。如果您想专门从引用中转义,请使用 withENT_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
Run Code Online (Sandbox Code Playgroud)

输出将是这样的:

Jane &amp; 'Tarzan'<br>
Jane &amp; &#039;Tarzan&#039;<br>
Jane &amp; 'Tarzan'
Run Code Online (Sandbox Code Playgroud)

PHP htmlspecialchars() 函数中阅读更多内容


Dev*_*oot 8

要仅替换单引号,请使用以下简单语句:

$string = str_replace("'", "\\'", $string);
Run Code Online (Sandbox Code Playgroud)


Jun*_*ior 6

您可以使用addcslashes函数来完成此操作,如下所示:

echo addcslashes($text, "'\\");
Run Code Online (Sandbox Code Playgroud)