Php 和 Javascript 失败 W3 验证器 XHTML 1.0 过渡

Php and Javascript fails W3 Validator XHTML 1.0 Transitional

提问人:user178167 提问时间:10/2/2017 最后编辑:Philuser178167 更新时间:10/12/2017 访问量:39

问:

我正在使用以下php和javascript

if ($name == "" || $name == $required)
{
echo"<p><span>Name</span></p><input size=\"60\" id=\"name\" name=\"name\" type=\"text\" value=\"$name\" onfocus=\"if (this.value == '$required') {this.value = '';}\" onblur=\"if (this.value == '') this.value=this.defaultValue;\"$name\""
;}

其结果是:

<p><span>Name</span></p><input size="60" id="name" name="name" type="text" value="Required" onfocus="if (this.value == 'Required') {this.value = '';}" onblur="if (this.value == '') this.value=this.defaultValue;"Required" />

但是,w3c 验证器说:

第 60 行,第 220 列:第 60 行,第 220 列:属性值文字只能出现在属性规范列表中,在 VI 分隔符
之后......'';}"onblur=“if (this.value == '') this.value=this.defaultValue;”必需“ />

您是否忘记了标记属性与其声明值之间分隔的“等号”?典型的语法是 attribute=“value”。

在同一行中,我还收到其他错误:

错误行 60,第 221 列:省略了“输入”的结束标记,但指定
了 OMITTAG NO ...'';}"onblur=“if (this.value == '') this.value=this.defaultValue;”必需“ />

您可能忽略了关闭元素,或者您打算“自关闭”元素,即以“/>”而不是“>”结尾。

信息行 60,第 25 列:开始标签在这里

名字

有人对使其有效有任何想法吗? 谢谢 马克

PHP XHTML的

评论

3赞 Phil 10/2/2017
你看不出这是一个问题吗?this.value=this.defaultValue;"Required" />
0赞 junkfoodjunkie 10/2/2017
嗯,首先......为什么要使用过时的、废弃的 xHTML 版本?您是否正在使用 XML?如果没有,让我们进入这个世纪,好吗?其次,为什么你有内联javascript?这与XHTML不能很好地配合。正确处理 javascript 事件,而不使用 onblur、onclick 和其他可憎的东西。
0赞 Lawrence Cherone 10/2/2017
正如您在结果中看到的那样,它在末尾添加了一个额外的内容,但为什么不使用单引号呢?此外,由于条件是您并不真正需要变量,我也不确定该名称如何具有 Required 值?"required$required
0赞 Phil 10/2/2017
你的标记到底应该是什么样子的?
0赞 Mr Lister 10/2/2017
此外,第二条错误消息只是由输出中的奇数个引号引起的,导致 /> 在验证器可以看到的范围内位于引号内。就这么简单。

答:

0赞 John 10/11/2017 #1

JavaScript 和 PHP 中始终使用大括号;忽略省略它们的 Slacker 代码;严格的代码是最好的代码。{}

其次,PHP 使用单引号和双引号的方式不同。

<?php
$a = 'user';
echo 'Hello $a';//Hello $a
echo "Hello $a";//Hello user
?>

其次,串联(PHP 中的句点,JavaScript 中的符号)是您在值方面似乎遇到的问题。避免使用双引号(如果有的话,性能提升可以忽略不计,但从长远来看,对编程上下文的敏锐更为重要)。

<?php
$a = 'user';
echo 'Hello '.$a.', how are you?';//Hello user, how are you?
?>

我在 PHP 中将元素切成几行,只是为了便于阅读。我从不避免在我的实时(或许多人称之为“生产”)代码中使用水平长行代码。这是记录您已经“完成”该代码的绝佳方式。日志查看程序 Hoo WinTail 通过允许您在使用滚轮时使用键来正确实现水平滚动,我希望他们能在任何地方实现这一点,尤其是 Notepad++(强烈推荐的高级代码编辑器)。inputCtrl

还要保持 HTML 属性的字母顺序。如果您的代码可以使用高级查找和替换等程序进行预测,它将大大提高您快速修复早期不良编码习惯的能力。

总而言之:

<?php
if ($name == "" || $name == $required)
{
 echo '<p><span>Name</span></p>';
 echo '<input id="name" name="name" ';
 echo 'onblur="if (this.value == '') {this.value = '.$required.';}" ';
 echo 'onfocus="if (this.value == '.$required.') {this.value = '';}" ';
 echo 'type="text" value="'.$name.'" />';
}
?>

最后,您使用的是 XHTML。这里需要一个关键的澄清。最高级别的编程是使用 XHTML5。

有一些解析器可以接受代码:

  • HTML 解析器
  • XML 解析器

还有代码的标准:

  • HTML4的
  • HTML5的
  • XHTML 1.x

您需要将 HTML5 与 XML 解析器 (XHTML5) 一起使用:

<?php
if (stristr($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml'))
{
 header('Content-Type: application/xhtml+xml; charset=UTF-8');
 echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
}
else
{
  header('Content-Type: text/html; charset=UTF-8');
}
?>

XML解析器要严格得多(Gecko渲染引擎,在Firefox中,但现在使用Waterfox),因此它将输出错误而不是让它们发生。了解错误可以修复它们并大大提高兼容性。如果你没有意识到,你就不会修复这些错误,因此你不会更有能力,也更难将自己与他人区分开来。在一个几乎放弃质量的世界里,质量至关重要。在我的个人资料中查看我的网站以获取更多好的代码(查看源代码)。祝你好运!

评论

0赞 user178167 10/12/2017
感谢您的回答,但我得到: 解析错误:语法错误,意外 '') {this.value = '' (T_CONSTANT_ENCAPSED_STRING),期望 ',' 或 ';' 在 /var/www/clients/client6/web8/web/contact.inc 中.php第 44 行是: echo 'onblur=“if (this.value == '') {this.value = '.$required.';}”';这与此处发布的完全一样
0赞 John 10/12/2017
我缺少带有属性的行上的变量的几个句点。只需在之前和之后添加句点:。如果您不确定,通常在遇到错误时,只需将单行或多行注释掉。$resultonfocus.$result.///* line breaks here */