2013-09-30 105 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