преобразовать XML nodeValue в строку PHP / HTML

Я использую живой поиск AJAX для создания ссылок на профили пользователей. Это работает хорошо, я всегда оказываюсь в профиле, который я хочу, но это не проблема.

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

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

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

но фактические ссылки выглядят так:

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

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

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

Я надеюсь, что есть простой способ исправить это. Как nodeValue-> строка или что-то. Мне нужно изменить 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;
?>

Внутри моего XMLFILE структура выглядит так, если она помогает:

<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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]