2013-09-30 3 views
1

XML 파일에서 항목을로드하고 표시하는 스크립트가있어 사용자가 파일에서 제거 할 항목을 선택할 수 있습니다. 끝 부분에 공백과 제목 및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>'; 
?> 

나는 우연히 한 문제는 그것이 제대로 주로 하이픈 항목 (- - 대신이 표시를) 일부 개체를 표시하지 않는다는 것입니다 : 여기에 PHP입니다 이 때문에 내 제거 코드가 항목을 찾지 못하여 제거 할 수 없습니다. 나는 무엇을 해야할지 모르겠다. 왜 그런 일을하는지 모르겠다. 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 식을 사용하여이 문제를 해결할 수 :

"2"를 제거해야합니다 제목의 인덱스
//Title[2] 

.

가능한 솔루션입니다. 따라야 할 다른 경로는 제목에 가장 적합한 인코딩 옵션을 제공하는 공백을 처리하는 것입니다. htmlentity은 당신이 당신의 문제를 해결한다면

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

정말 고마워요! 나는 그 일을하는 것을 결코 생각조차하지 못했고, 내가했던 것처럼 훨씬 더 의미가 있습니다. 지금까지 완벽하게 작동하지만 여전히 테스트가 조금 더 필요하지만 잘 찾고 있습니다! 도와 주셔서 감사합니다! – looserlf

관련 문제