php - 如何在javascript中转义html/特殊字符串

标签 php javascript escaping html-escape-characters

<分区>

我有一个需要打印一些文本的 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 = &quot;http:\/\/site.com\/page.php?name=Jason%27s+%22Awesome%22+Bakery&quot;;" 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

关于php - 如何在javascript中转义html/特殊字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14719221/

相关文章:

php - 使用 uniqid() 上传时的唯一文件名

javascript - 如何通过名称而不是键号从数组中获取值

javascript - 使用 body onload 和 document.write 时忽略样式表

MySQL unicode 文字

ubuntu - 如何在 ubuntu 中使用 grep 计算新行数

bash - 如何使用 SED 查找和替换目标字符串中的 "/"字符的 URL 字符串?

php - 通过Codeigniter从MySQL表中获取数据

php - WordPress 只能使用 777 权限

php - 避免两个用户同时发帖时ID混淆?

javascript - 当我使用 .interpolate ('basis' 时,D3js 折线图没有遍历我的所有点)?