我正在编写一些JavaScript代码,该代码使用PHP渲染的字符串。如何在PHP字符串中转义单引号(和仅单引号)?
<script type="text/javascript">
$('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
我正在编写一些JavaScript代码,该代码使用PHP渲染的字符串。如何在PHP字符串中转义单引号(和仅单引号)?
<script type="text/javascript">
$('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
json_encode()
获取有效的Javascript字符串(并删除外部单引号)。
.html()
而不是用单引号引起来?php扩展将发生。对于元素和导入中的属性以及脚本块中的变量赋值,一切都在这样做。
Answers:
很简单:echo str_replace('\'', '\\\'', $myString);
但是,我建议使用JSON和json_encode()
函数,因为它会更可靠(例如,引用新行):
<?php $data = array('myString' => '...'); ?>
<script>
var phpData = <?php echo json_encode($data) ?>;
alert(phpData.myString);
</script>
str_replace("'","\\'", $string)
类似的答案都是错误的。考虑字符串“它将被替换为\\”,这将导致注入漏洞。而是按照Crozin的建议使用json_encode。
JSON.parse('<?php echo json_encode($data);?>');
,但是失败了,因为数据中只有一个引号。后来我才知道这里没有必要使用JSON.parse
。
如果要使用a来转义字符\
,则可以使用addcslashes()
。例如,如果您只想转义单引号(例如问题),则可以执行以下操作:
echo addcslashes($value, "'");
如果你想逃避'
,"
,\
,和nul
(字节空),你可以使用addslashes()
:
echo addslashes($value);
使用本机功能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
输出如下:
Jane & 'Tarzan'<br>
Jane & 'Tarzan'<br>
Jane & 'Tarzan'
在PHP htmlspecialchars()函数中阅读更多内容
您可以使用addcslashes函数来完成此操作,如下所示:
echo addcslashes($text, "'\\");
经过长时间解决这个问题,我认为我找到了一个更好的解决方案。
这两个功能的组合使得可以对字符串进行转义以用作HTML。
第一,如果在JavaScript函数调用中使用字符串,则转义双引号;第二个则转义使用单引号,避免在参数周围使用那些简单的引号。
解:
mysql_real_escape_string(htmlspecialchars($string))
解决:
echo'onclick =“ javascript_function(\''。mysql_real_escape_string(htmlspecialchars($ string))”
我写了下面的函数。它代替了以下内容:
带斜杠的单引号[']和带单引号[\']的单引号。
带两个反斜杠[\\]的反斜杠[\]
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。
addcslashes($mystringWithSingleQuotes, "'\"\r\n\\\t\0..\37")