0

我有这个简单的小 JavaScript 片段来尝试保护我的电子邮件地址:

<p>Email:<br />
<script type="text/javascript">
    mixupE='mywebsite.com'
    mixupE=('myname' + '<span>@</span>' + mixupE)
    document.write(mixupE)
</script>
</p>

问题是它是唯一不验证 xhtml strict 的代码部分。这与 span @ /span 部分有关。我刚刚包含了跨度,以便我可以设置与电子邮件地址的其余部分不同的 @ 符号样式。

有人有更好的方法吗?

理想情况下,我想让一切都得到验证:o)

我现在通过这样做解决了它:

<p>Email:<br />
        <script type="text/javascript">
            mixupA='name'
            mixupA=('my' + mixupA)
            document.write(mixupA)
        </script><span>@</span><script type="text/javascript">
            mixupB='site.com'
            mixupB=('myweb' + mixupB)
            document.write(mixupB)
        </script>
</p>

可能不是最好的做事方式,但它似乎有效,我的页面现在验证为 xhtml strict :o)

4

5 回答 5

3

您需要将元素包装在 CDATA 块中,如规范中关于 HTML 和 XHTML 之间差异的部分所述,特别是脚本和样式元素部分。

但是,您几乎可以肯定地使用 text/html Content-Type 为您的 XHTML 提供服务,因此您需要跳过使其与 HTML 足够相似以继续跨浏览器工作。在这种情况下,通过注释掉 CDATA 标记

<script type="text/javascript">
    //<![CDATA[
    mixupE='mywebsite.com'
    mixupE=('myname' + '<span>@</span>' + mixupE)
    document.write(mixupE)
    //]]>
</script>
于 2011-01-31T07:10:00.800 回答
1

使用间接的表示方式<

<script type="text/javascript">
  var lt = String.fromCharCode(60);
  mixupE='mywebsite.com'
  mixupE=('myname' + lt + 'span>@' + lt + '/span>' + mixupE)
  document.write(mixupE)
</script>
于 2011-01-31T04:26:09.663 回答
0

这就是我与人相处的地方。我有以下两种可能性,它们似乎都有效,并且都验证为严格的 xhtml。

<script type="text/javascript">
   <!--
   var lt = String.fromCharCode(60);
   mixupE='mywebsite.com'
   mixupE=('myname' + lt + 'span>@' + lt + '/span>' + mixupE)
   document.write(mixupE)
   //-->
</script>

或者

<script type="text/javascript">
   //<![CDATA[
   mixupE='mywebsite.com'
   mixupE=('myname' + '<span>@</span>' + mixupE)
   document.write(mixupE)
   //]]>
</script>

为什么我应该选择其中一个而不是另一个?

于 2011-02-01T04:30:47.597 回答
0

使用 CDATA 和转义的组合,如下所示:

<script type="text/javascript">
//<![CDATA[
mixupE="mywebsite.com";
mixupE=("myname" + "<span>@<\/span>" + mixupE);
document.write(mixupE);
//]]>
</script>
于 2011-02-21T22:59:30.367 回答
0

最简单的答案就是拆分字符串,这样它就不会认为它是一个实体。这是完全有效的,几乎与您原来的相同:

<p>Email:<br />
<script type="text/javascript">
    mixupE='mywebsite.com'
    mixupE=('myname<' + 'span>@<' + '/span>' + mixupE)
    document.write(mixupE)
</script>
</p>

无需混淆尖括号。

但不要忘记你的varand ;。简化为:

<p>Email:<br />
<script type="text/javascript">
    var mixupE='mywebsite.com';
    document.write('myname<' + 'span>@<' + '/span>' + mixupE);
</script>
</p>
于 2014-02-12T22:27:30.423 回答