0

簡単なサイト マップ スクリプトを作成しましたが、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";

次に、値が 1 つしかなく、「XML 解析エラー: 形式が正しくありません」というエラーが表示されます。

それを機能させるための変更を見て、提案してください。

ありがとう

4

3 に答える 3

1

XMLを台無しにしている変数に文字が含まれていると思います。

たとえば&、、、 ... コンテンツäを正しくエンコードする必要があります<>

出力をラップしてみてください: 最初に、XML の出力を次のように変更$urlしてから、次のように更新します。$url = $site .'/'. $pflink .'/'. $pagelink;

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

http://en.wikipedia.org/wiki/CDATACDATAで入手可能な説明

于 2012-08-23T08:03:41.757 に答える
1

thedomFrontEndJohnの回答とコメントに基づいて、私はこのように正しく理解しました。

$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>';

これが他の人にも役立つことを願っています。

于 2012-08-23T08:43:14.903 に答える
0

私があなたの問題を正しく理解している場合、現在、'を使用しているために変数の値を取得できませんが、"を使用しようとすると、変数がXMLをエコーするようになります。

試す:

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

これにより、「」を使用せずに変数の値が得られます。誤解されている場合は、お知らせください。

編集:それについて考えると、変数が'の使用中に値を与えていないと仮定すると、1つ以上の変数の値がXMLを混乱させている可能性があります。まだ行っていない場合は、変数の内容をチェックして問題がないかどうかを確認する価値があります。

于 2012-08-23T07:55:50.197 に答える