我有一个这样的字段:
<input type="text" name="email" />
我正在使用PHP来检查表单的有效性,该表单包含除此字段之外的其他字段。 如果有效性检查失败,我将值存储在会话中,并再次输出带有错误消息的表单,并预填充表单值。
如果我添加一封电子邮件,说"person@example.com",并且表单无效,则"person@example.com"将替换为 JS:
<script type='text/javascript'> <!-- var prefix = 'ma' + 'il' + 'to'; var path = 'hr' + 'ef' + '='; var addy34269 = 'person' + '@'; addy34269 = addy34269 + 'example' + '.' + 'com'; document.write('<a ' + path + '''' + prefix + ':' + addy34269 + '''>'); document.write(addy34269); document.write('<'/a>'); //-->'n </script><script type='text/javascript'> <!-- document.write('<span style=''display: none;''>'); //--> </script>This email address is being protected from spambots. You need JavaScript enabled to view it. <script type='text/javascript'> <!-- document.write('</'); document.write('span>'); //--> </script>
不用说,这不是我想要的。 这发生在Chrome和Firefox中;我不确定其他人。 如何防止浏览器在表单失效后替换电子邮件?
我曾想过使用 str_replace 使电子邮件看起来不像电子邮件,然后使用 JS 进行另一个字符串替换以使其恢复到原始值,但如果可能的话,我想在没有 JS 的情况下执行此操作。 有什么想法吗?
当您(或您的主机)正在使用Joomla时! 您可以完全禁用"电子邮件伪装"插件或禁用单个电子邮件的伪装功能,如此处所述
我以前见过这个。我在我的网站上使用CloudFare,并且对电子邮件地址进行明文编码,以防止它们被垃圾邮件插件窃取。您可能有类似的服务来帮助保护您的虚拟主机。
<script type='text/javascript'> <!-- var prefix = 'ma' + 'il' + 'to'; var path = 'hr' + 'ef' + '='; var addy34269 = 'person' + '@'; addy34269 = addy34269 + 'example' + '.' + 'com'; document.write('<a ' + path + '''' + prefix + ':' + addy34269 + '''>'); document.write(addy34269); document.write('<'/a>'); //-->'n </script><script type='text/javascript'> <!-- document.write('<span style=''display: none;''>'); //--> </script>This email address is being protected from spambots. You need JavaScript enabled to view it. <script type='text/javascript'> <!-- document.write('</'); document.write('span>'); //--> </script>
仔细阅读代码,您会注意到它如何指出"该Email地址已受到反垃圾邮件插件保护"。
编辑:这是服务器端编辑,因此每个请求该页面的浏览器都会获得该结果。
当您在具有最高安全设置的 CDN 时激活了 cloudflare 时,就会发生这种情况。您可以登录您的 cloudflare 帐户并将您的设置更改为中等。
此外,如果您使用的是joomla,则可以在要替换的电子邮件地址前面添加{emailcloak=off}。例如:{emailcloak=off} youremail@emailofyoursite.com
这通常可以解决问题。