将 XML 节点值转换为 PHP/HTML 字符串
transform XML nodeValue to PHP/HTML string
我正在使用 AJAX 实时搜索来生成特定于用户配置文件的 link。它运行良好,我总是以我想要的配置文件结束,但有一个问题。
让我们为用户 1(用户名 = testuser;user_id = 1;blogname = testblog)执行此操作。如果我搜索 "test",两个 link 都会显示,link 到 testuser 的个人资料,link 到 testuser 的博客。现在奇怪的是,links 看起来像这样:
profile.php?user=1&page=profile
profile.php?user=1&page=blog
但实际的 link 看起来像这样:
profile.php?user=%20+%201%20+%20&page=profile
profile.php?user=%20+%201%20+%20&page=blog
因为我最终到达了我想要的页面,你可以说这无关紧要,但它确实如此,因为我需要 $GET_['user'] 值始终是实数,而不是我正在处理的那种事情,在这里。
我希望有一些简单的方法可以解决这个问题。像 nodeValue->string 之类的。我需要更改我认为这部分代码中的节点值:$z->item(0)->childNodes->item(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>
您遇到的问题是因为您的代码向生成的 link 添加了空格和加号。空格自动编码为 %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>";
所有四次都需要进行此更改。
我正在使用 AJAX 实时搜索来生成特定于用户配置文件的 link。它运行良好,我总是以我想要的配置文件结束,但有一个问题。
让我们为用户 1(用户名 = testuser;user_id = 1;blogname = testblog)执行此操作。如果我搜索 "test",两个 link 都会显示,link 到 testuser 的个人资料,link 到 testuser 的博客。现在奇怪的是,links 看起来像这样:
profile.php?user=1&page=profile
profile.php?user=1&page=blog
但实际的 link 看起来像这样:
profile.php?user=%20+%201%20+%20&page=profile
profile.php?user=%20+%201%20+%20&page=blog
因为我最终到达了我想要的页面,你可以说这无关紧要,但它确实如此,因为我需要 $GET_['user'] 值始终是实数,而不是我正在处理的那种事情,在这里。
我希望有一些简单的方法可以解决这个问题。像 nodeValue->string 之类的。我需要更改我认为这部分代码中的节点值:$z->item(0)->childNodes->item(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>
您遇到的问题是因为您的代码向生成的 link 添加了空格和加号。空格自动编码为 %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>";
所有四次都需要进行此更改。