2016-12-08 14 views
0

Я использую прямой поиск AJAX для создания ссылок на конкретные профили пользователя. Он работает хорошо, я всегда оказываюсь в профиле, который хочу, но есть проблема.преобразовать XML nodeValue в строку PHP/HTML

Давайте сделаем это для пользователя 1 (имя пользователя = testuser; user_id = 1; blogname = testblog). Если я буду искать «тест», будут показаны обе ссылки, ссылка на профиль пользователя testuser и ссылка на блог testuser. Странная вещь теперь, ссылки работают, как будто они будут выглядеть следующим образом:

profile.php пользователь = 1 & страница = профиль

profile.php пользователь = 1 & страница = блог?

но фактические ссылки выглядеть следующим образом:

profile.php пользователь =% 20 +% 201% 20 +% 20 & страница = профиль

profile.php? Пользователя =% 20 +% 201% 20 +% 20 & страница = блог

Так как я в конечном итоге на странице, я хочу, чтобы вы могли сказать, что это не имеет значения, но это так, потому что мне нужно, чтобы значения $ GET _ ['user'] всегда были реальными числами, а не такими вещами, с которыми я имею дело, здесь.

Надеюсь, есть простой способ исправить это. Как nodeValue-> string или что-то еще. Мне нужно изменить nodeValue в этой части кода, я думаю: $ z-> пункт (0) -> childNodes-> пункт (0) -> nodeValue

Это код, я использую:

<?php 
$xmlDoc=new DOMDocument(); 
$xmlDoc->load("../xml/accounts.xml"); 

$x=$xmlDoc->getElementsByTagName('account'); 

//get the q parameter from URL 
$q=$_GET["q"]; 

//lookup all links from the xml file if length of q>0 
if (strlen($q)>0) { 

    $hint=""; 

    for($i=0; $i<($x->length); $i++) { 
     $y=$x->item($i)->getElementsByTagName('username'); 
     $b=$x->item($i)->getElementsByTagName('blogname'); 
     $c=$x->item($i)->getElementsByTagName('companyname'); 
     $z=$x->item($i)->getElementsByTagName('user_id'); 



     //search for usernames 
     if ($y->item(0)->nodeType==1) { 

      //find a link matching the search text 
      if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) { 

       if ($hint=="") { 
        $hint= "<a href='profile.php?user= + " . 
         $z->item(0)->childNodes->item(0)->nodeValue . 
         " + &page=profile' >" . 
         $y->item(0)->childNodes->item(0)->nodeValue . "</a><span> (profile)</span>"; 

       } else { 
        $hint= $hint . "<br /><a href='profile.php?user= + " . 
         $z->item(0)->childNodes->item(0)->nodeValue . 
         " + &page=profile' >" . 
         $y->item(0)->childNodes->item(0)->nodeValue . "</a><span> (profile)</span>"; 
       } 
      } 
     } 




    //search for blognames 
     if ($b->item(0)->nodeType==1) { 

      //find a link matching the search text 
      if (stristr($b->item(0)->childNodes->item(0)->nodeValue,$q)) { 

       if ($hint=="") { 
        $hint= "<a href='profile.php?user= + " . 
         $z->item(0)->childNodes->item(0)->nodeValue . 
         " + &page=blog' >" . 
         $b->item(0)->childNodes->item(0)->nodeValue . "</a><span> (blog)</span>"; 

       } else { 
        $hint= $hint . "<br /><a href='profile.php?user= + " . 
         $z->item(0)->childNodes->item(0)->nodeValue . 
         " + &page=blog' >" . 
         $b->item(0)->childNodes->item(0)->nodeValue . "</a><span> (blog)</span>"; 
       } 
      } 
     } 


// Set output to "no suggestion" if no hint was found 
// or to the correct values 
if ($hint=="") { 
    $response="no QuickResults, hit enter"; 
} else { 
    $response=$hint; 
} 


//output the response 
echo $response; 
?> 

Внутри моей XML файле структура выглядит следующим образом, если это помогает:

<account> 
    <username>testuser</username> 
    <user_id>1</user_id> 
    <blogname>testblog</blogname> 
</account> 

ответ

0

проблема вы получаете возникает из-за того, что ваш код добавляет пробелы и знак плюс полученный ссылка. И пробелы автоматически кодируются как %20. Решение было бы удалить их из кода:

$hint= "<a href='profile.php?user=" . 
     $z->item(0)->childNodes->item(0)->nodeValue . 
     "&page=profile' >" . 
     $y->item(0)->childNodes->item(0)->nodeValue . "</a><span> (profile)</span>"; 

Это изменение должно быть сделано во всех четырех вхождений.

+0

Выполнено, и это работает, спасибо вам за помощь и дайте мне знать :) – Maxischl

+0

Счастливые помочь. Я был бы рад, если бы вы отметили мой пост как [принятый ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). Благодаря! –

+0

точно, я даже не знал об этом;) – Maxischl