今天在项目中遇到一个感觉很怪的问题,请各位朋友帮忙解释一下,谢了!!!今天用到一个网页编辑控件,类似于我现在发表问题时的这个编辑器,就是可以改变文字样式的这种。。提交这个输入框的内容时,在后台获取到的数据是(格式如下)——格式一:
<strong><a href="#"><font color="#999999">Test</font></a></strong>但是保存到数据库里面的格式是——格式二:
&lt;strong&gt;&lt;a href=&quot;#&quot;&gt;&lt;font color=&quot;#666666&quot;&gt;就是这样&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;将格式二里面的数据库取出来后,展示到页面上用的方式是从c#后台定义一个div,设置属性为runat="server",后台为:
this.divText.innerHTML = "从数据库里面取出来的数据——格式二那种",进过这个步骤后,前台显示的样式和刚开始设置的样式在网页上展示是一样的效果。问题一:从格式一到格式二之间的转化,为什么会自动进行,明明在调试的时候是格式一,开始到了数据库就成了各式二了。
问题二:为什么div.innerHTML=&lt;strong&gt;&lt;a href=&quot;#&quot;&gt;&lt;font color=&quot;#666666&quot;&gt;就是这样&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;在前台展示的样式是和<strong><a href="#"><font color="#999999">Test</font></a></strong>在前台展示的样式是一样的。换句话说,就是为什么div.innerHTML=&lt;strong&gt;&lt;a href=&quot;#&quot;&gt;&lt;font color=&quot;#666666&quot;&gt;就是这样&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;和<strong><a href="#"><font color="#999999">Test</font></a></strong>展示是等价的。

解决方案 »

  1.   

    我就是想明白innerHTML、innerText与&lt;类似的转义字符有哪些需要注意的地方,或者说小技巧吧求大家帮忙,不胜感激
      

  2.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    </head><body><div id="first">&lt;strong&gt;&lt;a href=&quot;#&quot;&gt;&lt;font color=&quot;#666666&quot;&gt;就是这样&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;</div>
    <div id="second"></div>
    <div id="three"></div>
    </body>
    </html>
    <script type="text/javascript">
    alert(document.getElementById("first").innerText);
    document.getElementById("three").innerHTML = document.getElementById("first").innerText;
    document.getElementById("second").innerHTML = '<strong><a href="#"><font color="#999999">就是这样</font></a></strong>';
    </script>
    第二个问题想明白了,其实document.getElementById("first").innerText;也就是&lt;strong&gt;&lt;a href=&quot;#&quot;&gt;&lt;font color=&quot;#666666&quot;&gt;就是这样&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;与<strong><a href="#"><font color="#999999">就是这样</font></a></strong>在赋值给div的innerHTML属性时,当html内容显示,自然显示的就是那种有样式的效果了。只不过应注意,innerHTML会自动识别转义符应该是这样的吧???请朋友继续发表高见!!!但是问题一还是不明白
      

  3.   

    上面忘了用样式,重写一遍!!!<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title> 无标题文档</title>
    </head><body><div id="first">&lt;strong&gt;&lt;a href=&quot;#&quot;&gt;&lt;font color=&quot;#666666&quot;&gt;就是这样&lt;/font&gt;& lt;/a&gt;&lt;/strong&gt;</div>
    <div id="second"></div>
    <div id="three"></div>
    </body>
    </html>
    <script type="text/javascript">
    alert(document.getElementById("first").innerText);
    document.getElementById("three").innerHTML = document.getElementById("first").innerText;
    document.getElementById("second").innerHTML = '<strong><a href="#"><font color="#999999">就是这样</font></a></strong>';
    </script>第二个问题想明白了,其实document.getElementById("first").innerText;也就是&lt;strong&gt;&lt;a href=&quot;#&quot;&gt;&lt;font color=&quot;#666666&quot;&gt;就是这样&lt;/font&gt;& lt;/a&gt;&lt;/strong&gt;<strong><a href="#"><font color="#999999">就是这样</font></a></strong>在赋值给div的 innerHTML属性时当html内容显示,自然显示的就是那种有样式的效果了。只不过应注意,innerHTML会自动识别转义符应该是这样的吧???请朋友继续发表高见!!!但是问题一还是不明白
      

  4.   

    存到数据库头应该还是< >吧,只是你再取出来的时候变成了&lt对吧! 你需要对含html特殊符号的字符串进行url编码,然后在JS中有相应的解码函数,就不会出现取出来后符号转译的问题了而至于为什么显示出来都一样,这个是浏览器解析的机制吧  &lt=“<” 等等 这些个转译字符如果直接写在网页上就不会被解析为HTML标签了
      

  5.   


    不是的,我调试时在后台取到的数据是标准的html,但是存到数据库里面就变成带转义的了
    并且很奇怪的是你这时候不能看到全部的转义后的代码,只能看到很少的一部分转义后的数据我用的是ms sql server 2000
      

  6.   

    ASP里我遇到过和你一样的问题,。NET不清楚!我用的是server.htmlencode,自然保存进去,没有做任何处理,然后就是那种代码,显示出来一切正常!
      

  7.   

    innerText 只在ie下有效,获取的是节点中的文本
    firefox下用textContent代替
    innerHTML 返回节点内的所有内容
      

  8.   

    innerText,IE/Chrome/Safari/Opera都支持,只有Firefox不支持,它会在节点下增加相应的文本,不会当作HTML代码渲染。innerHTML,可以设置和返回节点的内容。当设置时,其后字符串会被自动的当作HTML代码渲染在相应的节点下。
      

  9.   

    大家讲讲内部原理,我感觉alert()函数也是"一张网页",因为它具有识别转义符的功能。比如:<body>
    <div id="main">&lt;strong&gt;&lt;a href=&quot;#&quot;&gt;&lt;font color=&quot;#999999&quot;&gt;就是这样&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;</div>
    </body><script>
    alert(document.getElementById("main").innerText);
    </script>
    大家注意上面alert()函数里面的内容:document.getElementById("main").innerText;这个document.getElementById("main").innerText获取到的内容应是"&lt;strong&gt;&lt;a href=&quot;#&quot;&gt;&lt;font color=&quot;#999999&quot;&gt;就是这样&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;",但是通过alert()函数就变成了"<strong><a href="#"><font color="#999999">Test</font></a></strong>",也就是说alert()函数将转义后的html标签(<&gt;&lt;这种)转成了标准的html标签
      

  10.   

    <script>alert(1234);</script>