我有一个需要打印一些文本的 php/javascript 脚本。不幸的是,如果字符串具有特殊字符,则 js 似乎会崩溃
'
下面是脚本的一个片段。 $messageContent 和 $subject 是带有 html 标签的字符串。 (实际上是“'”字符)。
echo '
<script language="javascript">
function SelectRedirect(){
switch(document.getElementById(\'s1\').value)
{
';
echo '
case "?vrj_name='.$vrj_name.'":
window.location="?vrj_name='.$vrj_name.'&messageContent='.$messageContent_vrj.'&from_email='.$from_email.'&email='.$email.'&subject='.$subject.'";
break;
';
}
我在 php 中添加了一个函数来将“'”替换为“\'”并且它有效(js 成功执行)但是当我在网页中显示它们时我无法驾驭它们。
执行此操作的最佳方法是使用 json_encode
对值进行编码。这是一个简单的例子:
<?php
$name = "Jason's Bakery";
?>
<script>
var name = <?php echo json_encode($name); ?>;
DoSomethingWithName(name);
</script>
这可用于整数、字符串和其他值。请记住,它会根据需要添加引号,因此您需要组装和编码“一次整个值”。在您使用 URL 的示例中,您需要首先使用 PHP urlencode()
函数对其进行编码,然后通过 json_encode
将其传递以转换为 javascript 值。如果你将它放在 HTML 属性中,比如 onclick
,你需要进一步通过 htmlspecialchars(..., ENT_QUOTES)
传递它,然后将它放在 double 中引号。
http://php.net/manual/en/function.json-encode.php
例如,您需要在 PHP 中构建一个 URL,然后在 javascript 中使用它...
<?php
$name = "Jason's \"Awesome\" Bakery";
$url = "http://site.com/page.php?name=" . urlencode($name);
?>
<script>
var name = <?php echo json_encode($name); ?>;
DoSomethingWithName(name);
</script>
<input type="button" onclick="<?php echo htmlspecialchars('window.location = ' . json_encode($url) . ';', ENT_QUOTES); ?>" value="Click Me" />
结果是这样的:
<script>
var name = "Jason's \"Awesome\" Bakery";
DoSomethingWithName(name);
</script>
<input type="button" onclick="window.location = "http:\/\/site.com\/page.php?name=Jason%27s+%22Awesome%22+Bakery";" value="Click Me" />
不用说,您不想没有这些:
http://php.net/manual/en/function.json-encode.php
http://www.php.net/manual/en/function.urlencode.php
http://www.php.net/manual/en/function.htmlspecialchars.php