js单引号和双引号的转义问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js单引号和双引号的转义问题相关的知识,希望对你有一定的参考价值。

问题:鼠标移动到链接上边的地址显示是错误的,只显示了一半。
----------------------------------------------关键代码---------------------------------------------------
<div id="calendar"></div>
<script type="text/javascript">
<!--下面注释的这句是可行的-->//document.getElementById("calendar").innerhtml = "<s:iterator value='daysList[16]' ><br/><s:property value='schedulepeople'/></a></s:iterator>";

document.getElementById("calendar").innerHTML = "<s:iterator value='daysList[16]' ><a href=\\'javascript:updateForm(document.forms[0],\\"<c:out value=\\'$scheduleid\\'/>\\");\\'><s:property value='schedulepeople'/></a></s:iterator>";
</script>
----------------------------------------------浏览器解析后的源代码---------------------------------------------------
注:浏览器刷新,下面的结果会和500错误交替出现。

----------------------------------------------鼠标移动到链接上边的地址显示----------------------------------------

html的双引号是正常的,每一个属性,例如:value="",一般都有双引号包着。但是用js添加页面节点的时候,需要转义,比如:
var html = "<div onclick=\" openUrl( ' <s:url value='%resUrl'/> ' ) \"></div>";
document.getElementById("main").innerHTML = html;
最外面的那个双引号是表示一个字符串变量的意思,而被包在里面的双引号就不起作用,只有在页面显示的时候才会起作用,也就是说js不会认为第一个双引号和第二个双引号是一对,会认为</div>";这个双引号才是结尾,因为中间的被"\"转义了。
openUrl函数中的第一对单引号是表示字符串的意思,你省去也不会报错,中间那一对则是标签的属性需要。
最后的问题说明对struts的标签不熟,可以看下struts的property和ognl表达式,最多半个小时可学会。
参考技术A 可以这样试试,就是a标签href属性不要引号,比如一般情况下,<a href=""></a>变为<a href=></a>
所以你的可以变为innerHtml="<a href=javascript:updateForm(document.forms[0],'8eb')>lily</a>";
不过这样可能不符合w3c标准,你看看可不可以
参考技术B 要转义的字符用单斜杠别用双斜杠!
另外双引号内的引号全部都要转义的!本回答被提问者采纳
参考技术C 转义是用单引号的

在 MySQL 表中同时插入和更新转义字符、单引号和双引号

【中文标题】在 MySQL 表中同时插入和更新转义字符、单引号和双引号【英文标题】:insert and update escape charcter, simple and double quotes in the same time in a MySQL table 【发布时间】:2012-12-11 01:13:50 【问题描述】:

我担心在 MySQl 表 w 中插入文本。 我必须插入/更新包含 / " 和 ' 等字符的文本

只有在启用 NO_BACKSLASH_ESCAPES SQL 模式时才能插入转义字符 /。干扰字符 " 和 ' 请参阅此链接 http://dev.mysql.com/doc/refman/5.1/en/string-literals.html#character-escape-sequences

如果有人能解释一下 mysql_real_escape_string() 我不会低调

我想找一个纯mysql的解决方案 我没有使用 php。我在这里要做的是“模拟”内容管理系统:我即将编写一个 C# 编码的解决方案来管理不同形式的内容(文章、类别、标签等)并生成 .html 文件, MySQl 数据库在我的计算机中是本地的,接下来我会将 .html 文件上传到服务器。

我这样做是为了确保我所有的 html 页面都是 html 有效的,并且因为我不信任任何现有的解决方案(不仅涉及编码,而且在一般生活中)

请帮忙

【问题讨论】:

【参考方案1】:

每个 php db 连接扩展(mysql, mysqli, pdo)都有一个特殊的方法来安全查询sql注入,当你使用mysql扩展时,强烈建议使用mysql_real_escape_string()函数使查询中使用的所有变量安全,它是使用最广泛的功能。我认为没有任何纯粹的解决方案(当您在 php 中使用 mysql 扩展时)。 来自 php.net:

mysql_real_escape_string() - 转义特殊字符 unescaped_string,考虑到当前字符集 连接,以便将其放置在 mysql_query() 中是安全的。

【讨论】:

mysql_real_escape_string() 与注入无关。它不会使任何字符“安全”。它不应该用于“所有变量”。它不是“强烈推荐”,因为它只是一个字符串格式化工具:所以,它不是“推荐”但应该用于格式化字符串,但不应该用于其他任何东西 那么告诉我在使用 mysql 扩展时如何制作安全的变量?还有其他方法吗?? 我没有使用 php。我在这里要做的是“模拟”内容管理系统:我即将编写一个 C# 编码的解决方案来管理不同形式的内容(文章、类别、标签等)并生成 .html 文件, MySQl 数据库在我的计算机中是本地的,接下来我会将 .html 文件上传到服务器。我这样做是为了确保我所有的 html 页面都是 html 有效的,因为我不相信任何现有的解决方案(不仅涉及编码,而且在一般生活中)【参考方案2】:

任何字符串数据都可以插入到 SQL 查询中,如果按照 2 条规则格式化

用引号括起来(最好是单引号) 通过mysql_real_escape_string()传递

如果两个规则都遵循,那么无论是斜线、引号还是任何字符,都不会出现任何问题。

根据您的问题,/ 在 MySQL 中没有特殊含义。 \ 是转义字符。它也可以被另一个反斜杠转义。

$str = 'slashes \ quotes \' or whatever " else symbols';
var_dump($str);
$str = mysql_real_escape_string($str);
$sql = "INSERT INTO table SET str='$str'";

【讨论】:

是的,我很抱歉转义字符是 \ 而不是 /,谢谢 能否请您更具体地了解如何实施您的解决方案,因为我不是 mysql 专家。请注意,我使用的不是 php 或类似的解决方案,只是 MySQL 。谢谢

以上是关于js单引号和双引号的转义问题的主要内容,如果未能解决你的问题,请参考以下文章

sql注入逃逸双引号转义

存储过程中执行sql语句时如何转义双引号?

python单引号和双引号的区别

python里的单引号和双引号有啥区别

在 MySQL 表中同时插入和更新转义字符、单引号和双引号

关于js怎样替换反斜杠和单引号的问题