如何使用PHP有效地构建站点地图?

时间:2012-08-23 07:51:30

标签: php html xml sitemap

我已经构建了一个简单的站点地图脚本,我无法在URL字段中获取URL输出。

我的PHP脚本。

    header("Content-Type: text/xml;charset=iso-8859-1");
    echo '<?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
          xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
          http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    ';

    require_once('_ls-global/php/sr-connect.php');
    $db = mysql_select_db($database,$connection) or trigger_error("SQL", E_USER_ERROR);
    $sqlquery = mysql_query("SELECT * FROM $tablename ORDER by id")or die (mysql_error());

    while ($list = mysql_fetch_assoc($sqlquery)){

      $pflink=$list['pflink'];
      $pagelink=$list['pagelink'];

      $site="http://mysite.com";

      $url='$site/$pflink/$pagelink';

      $changefreq="weekly";
      $priority="1.0";

      echo '<url>
          <loc>'.$url.'</loc>
          <changefreq>'.$changefreq.'</changefreq>
          <priority>'.$priority.'</priority>
            </url>';

    }

    echo '</urlset>';

此脚本的输出是这个。

    <url>
    <loc>$site/$pflink/$pagelink</loc>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
    </url>

如果我将$url='$site/$pflink/$pagelink';更改为$url="$site/$pflink/$pagelink";

然后我只得到一个值和错误“XML解析错误:格式不正确”。

请参阅并提出任何修改以使其有效。

由于

3 个答案:

答案 0 :(得分:2)

我猜你在变量中使用的字符会弄乱XML。

例如&ä<> ...您需要正确编码内容。

尝试包装输出: 首先将$url更改为$url = $site .'/'. $pflink .'/'. $pagelink;,然后将XML的输出更新为:

<?php
// ...
      echo '<url>
          <loc><![CDATA['.$url.']]></loc>
          <changefreq>'.$changefreq.'</changefreq>
          <priority>'.$priority.'</priority>
            </url>';
?>

http://en.wikipedia.org/wiki/CDATA

提供的CDATA说明

答案 1 :(得分:1)

如果我正确理解你的问题,你现在无法获得变量的值,因为使用了'但是当试图使用'时,变量回应XML会让人感到不安。

<强>尝试:

$url = $site . '/' . $pflink . '/' . $pagelink;

这将给出变量的值而不使用“。如果我错过了解你,请告诉我。

编辑:考虑到这一点,看起来更多的是一个或多个变量的值可能会扰乱XML,假设变量在使用'时没有给出它们的值。如果你还没有这样做,可能值得检查变量的内容。

答案 2 :(得分:1)

根据 thedom FrontEndJohn 的答案和评论,我就是这样做的。

$url='$site/$pflink/$pagelink';更改为$url = $site .'/'. $pflink .'/'. $pagelink;

并修改。

      echo '<url>
      <loc>'.$url.'</loc>
      <changefreq>'.$changefreq.'</changefreq>
      <priority>'.$priority.'</priority>
        </url>';

    echo '<url>';
echo '<loc><![CDATA['.$url.']]></loc>';
echo '<changefreq>'.$changefreq.'</changefreq>';
echo '<priority>'.$priority.'</priority>';
echo '</url>';

希望这也有助于其他人。