2012-08-23 66 views
0

我已經構建了一個簡單的站點地圖腳本,我無法在URL字段中獲取URL輸出。如何使用PHP有效地建立站點地圖?

我的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解析錯誤:沒有很好的形成」。

請參閱並提出任何修改以使其正常工作。

感謝

回答

2

我想你正在搞亂XML的字符。

例如&,ä,<,> ...您需要正確編碼內容。

嘗試包裹輸出: 起初變化$url$url = $site .'/'. $pflink .'/'. $pagelink;,然後更新XML的輸出:在http://en.wikipedia.org/wiki/CDATA

+0

嘗試了這個錯誤:XML解析錯誤:文檔元素後出現垃圾 –

+0

您能否將文檔的輸出複製到http://www.pastie.org或者類似的東西(你可能需要先刪除''header()''函數) – thedom

+0

我需要整個輸出(移除header() ''函數和第一個''echo()''帶有文檔聲明''<?xml version =「...''並且請重新連接位置。並且:複製源代碼(來自瀏覽器)或用''htmlspecialchars()''編碼整個代碼 - 對於您來說更容易第一個(從瀏覽器複製源代碼)。 – thedom

1

如果我正確理解您的問題,您目前無法得到變量的值,由於使用「,但嘗試使用」,這樣變量呼應XML得到不高興的時候。

嘗試:

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

這將使變量的值,而不使用」。如果我錯過了解你,請告訴我。

編輯:考慮一下,它看起來更像是一個或多個變量的值,可能是擾亂XML的原因,假設這些變量在使用'時沒有給出它們的值。如果你還沒有這樣做,那麼值得檢查變量的內容是值得的。

+0

使用您的解決方案或使用「我只有一​​個值,仍然是錯誤'XML解析錯誤:不良形式' –

+1

也許增加的空白給你一些問題,那麼也@thedom下面提到,編碼也可能是在整理變量,編碼輸出,同時儘可能多地刪除空白,例如最後的echo語句中的空白處,將每一行都換成新的回聲或者使用一個單獨的「\ r \ n」。 – JohnDevelops

1

基於thedom

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

闡釋CDATA可用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>'; 

希望這會幫助別人了。