2013-09-30 155 views
1

我有一個腳本,它從XML文件加載項目並顯示它們,因此用戶可以選擇要從其文件中刪除的項目。這裏的PHP:DOM不能正確解析

<?php 
global $current_user; 
get_currentuserinfo(); 

$userid= $current_user->ID; 

$dom = new DOMDocument; 
$dom->load("playlists/$userid.xml"); 

echo '<div class="styled-select">'; 
echo '<center><form name="input" action="/remove/removesure.php" method="get">'; 
echo '<select name="q[]" size="2" multiple>'; 

$titles = $dom->getElementsByTagName('title'); 
foreach ($titles as $title) { 

    echo '<option>'.$title->nodeValue.'</option>'; 
} 
echo '</select>'; 
echo '<input type="submit" class="submit" value="Remove">'; 
echo '</form></center>'; 
echo '</div>'; 
?> 

我碰到的問題是,它並不能正確顯示某些對象,主要項目有連字符(它顯示 - 而不是 - )在結束與空間標題,因此,我的移除代碼找不到該項目,因此無法刪除它。我不知道該怎麼做,我不知道爲什麼這樣做。我在wordpress中運行代碼,如果這有所作爲。

任何想法?

+0

我不知道它是否能解決您的問題,但您絕對應該使用HTML轉義輸出。試試'echo'';' – IMSoP

+0

「*我在wordpress中運行代碼,如果這樣做有區別。*」 - 它有所不同。 – salathe

+0

@salathe怎麼樣?我正在使用一個插件讓我在頁面運行php – looserlf

回答

1

如果沒有任何形式的反應,我建議你使用標題標記的標題索引作爲「選項」的值。例如:

$titles = $dom->getElementsByTagName('title'); 
$counter = 0; 
foreach ($titles as $title) { 
    echo '<option value='.$counter.' >'.$title->nodeValue.'</option>'; 
    $counter++; 
} 

在removesure.php,您可以通過使用像下一個XPath表達式處理這個問題:

//Title[2] 

,其中「2」是必須被刪除標題的索引。

這是一個可能的解決方案;您可以嘗試遵循的另一條路徑是處理爲您的標題提供最佳編碼選項的空間。 htmlentity是您應該執行的功能

echo '<option>'.htmlentity($title->nodeValue).'</option>' 
+0

非常感謝!我甚至從來沒有想過這樣做,這比我以前做的方式更有意義。它迄今爲止工作完美,仍然需要做更多的測試,但看起來不錯!謝謝您的幫助! – looserlf