如何在不破坏XHTML标记验证的情况下在PHP中更改HTML标题?

时间:2010-12-30 18:55:34

标签: php validation title xhtml

以下是网站的结构:

PHP索引文件

//my class for analyzing the PHP query
$parameter = new LoadParameters();

//what this does is it accesses the database
//and according to the query, figures out what should be
//loaded on the page
//some of the things it sets are:
//    $parameter->design -  PHP file which contains the design
//                          HTML code of the page
//    $parameter->content - Different PHP file which should be loaded
//                          inside the design file
$parameter->mysqlGetInfo($_SERVER['QUERY_STRING']);

//load the design file
include($parameter->design);

PHP设计文件

只是通用结构。显然它有更多的设计元素。

<html>
  <head>
     ...
  </head>
  <body>
    <?php
       //this loads the content into the design page
       include($parameter->content);
    ?>
  </body>
</html>

问题

所以这是我遇到的问题。 $parameter->content文件是动态PHP文件,这意味着内容也会根据查询而变化。

例如,如果我的图片页面包含?img=1?img=2等查询,那么我的LoadParameter类只会查看查询的img部分并知道页面内容应为image.php。然而,image.php会再次查看查询并确切地指出要加载的图像。

这会给我带来问题,因为我想为不同的图片设置不同的<title></title>。所以我的解决方案只是在内容页面中设置<title></title>元素。这有效,但它打破了W3C的XHTML标记验证,因为它使网站的结构如下:

<html>
  <head>
     ...
  </head>
  <body>
    ...
    <title>sometitle</title>
    ...
  </body>
</html>

不允许在<title></title><body></body>

那么如何在不破坏XHTML标记验证的情况下更改标题?

注意 :我无法使用javascript,因为搜索引擎无法看到该页面的标题。我需要直接在PHP中完成。

提前完成。

5 个答案:

答案 0 :(得分:0)

为什么不做第二次包括在适当的地方执行标题?

<html>
    <head>
     <?php
       inlcude($parameter->title);
     ?>
      ...
    </head>
    <body>
    <?php
    //this loads the content into the design page
       include($parameter->content);
    ?>
    </body>
</html>

答案 1 :(得分:0)

您不能只是更改PHP代码,以便您可以执行以下操作:

<html>
  <head>
     <title><? print($parameter->title); ?></title>
  </head>
  <body>
    <?php
       //this loads the content into the design page
       include($parameter->content);
    ?>
  </body>
</html>

答案 2 :(得分:0)

我将所有<head>代码移动到一个名为html_head($ title)之类的'common function'中,然后让它将标题放在它所属的位置。

然后只需从页面中调用该函数即可修复。

不要忘记在该函数中包含<body>标记,否则它将无效!

阐述;)

function html_head($title) {?>
    <html>
        <head>
            <title><?=$title?></title>
            <!-- Put whatever you want... here! -->
        </head>
        <body>
<?}

然后在$ parameter-&gt;内容中,调用html_head(“Title”)

答案 3 :(得分:0)

如果可以在不显示HTML代码的情况下包含$ parameter-&gt;内容会更容易,而是使用显示HTML代码的$ parameter-&gt;显示(或类似)功能。这样,您可以在文件开头包含PHP代码,而不必担心无法访问标题。

<?php
  require_once($parameter->content);
?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="UTF-8" /> 
    <title><?php echo $parameter->title; ?></title>
  </head>
  <body>
    <?php
       echo $parameter->display;
    ?>
  </body>
</html>

答案 4 :(得分:0)

这就是我解决问题的方法。

我将PHP设计更改为:

//get the content PHP file
//inside the file I set the following variables
//which are used below:
//$parameter->title - the string which contains the title
//$parameter->html - the string which contains the HTML content
include($parameter->content);

//string which will contain the html code of the whole page
$html = <<<EndHere
<html>
  <head>
      <title>
EndHere;
//add title
$html .= $parameter->title;
$html .= <<<EndHere
      </title>
  </head>
  <body>
EndHere;
//add the content of the page
$html .= $parameter->html;
$html .= <<<EndHere
  </body>
</html>
EndHere;

//output the html
echo $html;

这是Content PHP文件的基本结构。由于唯一可能包含该文件的页面是我的设计页面,因此我可以在其中引用$parameter

//set the title
$parameter->title = "sometitle";

//set the content HTML
$parameter->html = "some HTML here";

这不是一个非常干净的解决方案,但它运作良好。