在带有HTML的PHP文件中,我需要一个!DOCTYPE声明吗?

40

我有一个包含网站内容的php文件。这个文件需要是.php格式,因为我先获取一些变量,然后再在网站内容中使用它们。就像这个例子:

<?php
$user_name = $_REQUEST['username'];
?>

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>Page Title</title>
    <link rel="stylesheet" href="css/style.css" />
</head>
<body>
Welcome <?php echo $username;?>
</body>
</html>

如果文件扩展名是php,我需要使用<!DOCTYPE HTML>吗?此外,它是否放置正确?它应该放在<html>标签之前还是在文件的第一行?

我还注意到,如果我删除<!DOCTYPE HTML>,我的某些css代码将停止工作...

非常感谢。

10个回答

34

是的,你需要一个 DOCTYPE,因为你的浏览器只会看到上面代码的下面部分。

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>Page Title</title>
    <link rel="stylesheet" href="css/style.css" />
</head>
<body>
Welcome THE USER NAME
</body>
</html>

我通常会把关闭的PHP标签和DOCTYPE标签放在一起,像这样 ?><!DOCTYPE HTML>


6
请注意,在 PHP 结束标签 (?>) 和文档类型声明 (<!DOCTYPE) 开始之间缺少空白。否则会出现混乱情况,详情参见 此处 - mTorres

12

抱歉打扰您,但是似乎没有人解释为什么在HTML中需要doctype(是的,一个输出HTML的PHP脚本最终会成为HTML文件)。

声明doctype会影响浏览器解析你的HTML的方式(这也许就是为什么没有doctype时你的CSS代码可能停止工作的原因)。基本上有两种方式:怪异模式和严格模式。后者遵循标准,所以你应该始终告诉浏览器你的代码遵循哪个HTML标准(现在你可能想要HTML5,它有最简单的doctype:<!DOCTYPE html>)。

详细解释请参见此处


9
正如其他人所说,!DOCTYPE在输出HTML的php脚本中是必要的。如果你正在创建图像或执行bash文件等,情况会有所不同。
至于它应该放在哪里,最好把它放在开头,这样你就不会在它之前意外地输出一些东西,但如果你正在使用会话变量或发送头信息,你将需要确保在声明doctype之前完成这些操作。请记住,在通过php发送头信息或启动会话之前,不能有任何浏览器输出(即使是空格)。

这个答案的第二段非常重要。我尝试了所有的方法,但似乎都不起作用,直到我将 DOCTYPE 声明移动到所有会话和头管理之后。非常感谢。 - George

3

是的,你应该有DOCTYPE声明,因为你发送给浏览器的是HTML而不是PHP。

这个声明告诉浏览器你正在使用HTML 5,并告诉它如何渲染它。


3

无论html是如何构建的,您都应该始终在其中放置一个Doctype。

w3 doctype列表


3

使用HTML的规则在纯HTML文件和带有嵌入式PHP的HTML文件中同样适用。在任何需要纯HTML文件的情况下,您都需要一个文档类型声明。

顺便提一下,在第一个PHP代码块结尾和文档类型声明之间存在空格。我记得在文档类型声明之前的空格可能会有问题(尽管这可能只适用于XHTML)。


3

PHP和HTML实际上没有任何关系-它只是服务器端代码在输出一堆文本,由浏览器进行解释。

文档类型声明是浏览器解释随后出现的HTML的关键组成部分。


2

你的最终输出是HTML,这就是使用doctype的原因。所以,是的,你需要一个。如果它破坏了你的CSS,那么你的HTML和/或CSS是错误的,需要修复。


2

如果嵌入了HTML代码,最好将.php文件视为普通的HTML文件,并指示服务器扫描其中的动态(PHP)代码。

文档仍需具备有效的!DOCTYPE声明以保证语义正确性。


1
<!DOCTYPE HTML>
<table  style="position:absolute; bottom:20%; right:40%;" width="150">

如果你在PHP文件中加入<!DOCTYPE HTML>,有些样式将无法正常工作,出现对齐问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接