你好朋友,我有一些小问题与我的查询,我不能解决它。
$comp = mysql_query("SELECT * from abc order by name ASC");
$count = mysql_num_rows($comp);
$data = array();
while($row = mysql_fetch_assoc($comp)) {
$l = urlencode($row['name'][0]); // first letter/number
$category_list[$l][]=( $row['name']);
}?>
<ul>
<?php
if(is_array($category_list)){
foreach($category_list as $k=>$v ) {?>
<div class="comp_num"><h3><u><?php echo $k ?></u></h3></div>
<div class="comp_list">
<?php
foreach($v as $cat) {
//echo "<div>$cat</div>"; // category name?>
<li><a href="www.abc.com?.c=<?php echo $cat ?>"><?php echo $cat ?></a></li>
<?php }?>
</div>
<?php }?>
</ul>
<?php
}
?>
www.abc.com/p_review_page ? c = 1% 20 c%20& % 20 c % 20公司% 20有限公司
当我执行这段代码时,这段代码将转义来自"&"操作符的所有字符串
<?php
if(isset($_GET["c"]))
{
$c=mysql_real_escape_string($_GET['c']);
}
echo "$c";
}
?>
我得到这样的结果:1 C
但是我想显示"1 C &"
如何解决…请帮助
&
是URL中参数之间的分隔符。如果你想把它包含在参数中,它必须用十六进制编码为%26
,所以它应该是:
www.abc.com/p_review_page?c=1%20C%20%26%20C%20incorporation%20Ltd.
如果你在PHP中创建URL,你应该使用urlencode()
来编码每个参数。下面是代码:
foreach($v as $cat) { ?>
<li><a href="www.abc.com?c=<?php echo urlencode($cat) ?>"><?php echo htmlentities($cat) ?></a></li>
<?php }?>
试试这个:
$url = '?' . http_build_query(array(
'say' => 'A & B'
));
//然后输入:
echo $_GET['say'];
$category_list=http_build_query(array(1=>'C & C in',2=>'A & B'));
或者你可以把数组写成
is_array(http_build_query($category_list))
首先您没有正确地编码您的URL。&符号&
变为%26
。否则,它将用作更多查询字符串变量的分隔符。
另外,当你想回显一个变量时,不要使用字符串插值…回显它:
echo $c;
最后,您应该考虑切换到PDO并使用准备好的/参数化的查询。mysql_*
函数集将很快从PHP中删除。