¿Necesito una declaración !DOCTYPE en un archivo php con html?

4 minutos de lectura

avatar de usuario
danielfox

Tengo un archivo php con el contenido de mi sitio web. El archivo debe ser .php porque primero obtengo algunas variables y luego las uso en el contenido del sitio web. Como este ejemplo:

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

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

¿Necesito el <!DOCTYPE HTML>, ya que la extensión del archivo es php? Además, ¿está colocado correctamente? ¿Debería aparecer antes de la etiqueta o en la primera línea de mi archivo?

También noté que si elimino el <!DOCTYPE HTML>parte de mi código css deja de funcionar…

Muchísimas gracias.

avatar de usuario
graham walters

Sí, necesita un DOCTYPE ya que su navegador solo ve la siguiente parte del código anterior

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

Por lo general, coloco la etiqueta PHP cercana y el DOCTYPE juntos así ?><!DOCTYPE HTML>

  • Por favor, observe la falta de espacio vacío entre la etiqueta php de cierre (?>) y el inicio de la declaración del doctype (<!DOCTYPE). De lo contrario, las cosas pueden complicarse

    – mTorres

    17 de noviembre de 2016 a las 14:57


avatar de usuario
mTorres

Perdón por resucitar a los muertos, pero nadie parece explicar por qué necesita un tipo de documento en HTML (sí, un script PHP que genera HTML es un archivo HTML al final).

Declarar un doctype afecta la forma en que el navegador interpreta su HTML (esto es probablemente por qué su código css puede dejar de funcionar sin un doctype). Básicamente hay 2 formas: modo peculiar y modo estricto. Este último se apega a los estándares, por lo que siempre debe decirle al navegador qué estándar HTML sigue su código (hoy en día probablemente desee HTML5 que tiene el tipo de documento más simple: <!DOCTYPE html>).

Ver aquí para una explicación más detallada.

Como han dicho otros, !DOCTYPE es necesario en los scripts php que generan HTML. Si estuviera creando una imagen o ejecutando un archivo bash o algo así, la historia sería diferente.

En cuanto a dónde pertenece, es una buena idea ponerlo al principio solo para que no genere accidentalmente algo antes, pero si está usando variables de sesión o enviando encabezados, querrá asegurarse de hacer esas cosas ANTES declarando un doctype. Recuerde, NO puede haber salida del navegador (incluso espacios en blanco) antes de que se envíen los encabezados a través de php o se inicien las sesiones.

  • El segundo párrafo de esta respuesta es muy importante. Estaba intentando todo pero nada parecía funcionar, hasta que muevo el DOCTYPE declaración después de toda la sesión y la gestión de encabezados. Muchas gracias.

    – Jorge

    8 de junio de 2016 a las 1:24

Sí, deberías tener la DOCTYPE declaración, ya que lo que le envía al navegador es HTML, no PHP.

La declaración le dice al navegador que está usando HTML 5 y le dice cómo representarlo.

Siempre debe poner un Doctype en su html, sin importar cómo esté construido el html.

lista de tipos de documento w3

avatar de usuario
GordonM

Las mismas reglas para HTML se aplican por igual, ya sean archivos HTML sin formato o archivos HTML con PHP incorporado. Necesita un tipo de documento en cada circunstancia en la que necesitaría uno en HTML simple.

Por cierto, hay un espacio en blanco entre el final del primer bloque del código PHP y el tipo de documento. Me parece recordar que los espacios en blanco antes del tipo de documento pueden ser problemáticos (aunque eso solo podría aplicarse a XHTML)

avatar de usuario
Juan Conde

Su salida final es HTML, que es lo que usa el tipo de documento. Entonces, sí, necesitas uno. Si está rompiendo su CSS, entonces su HTML y/o CSS es incorrecto y debe corregirse.

¿Ha sido útil esta solución?