PHP 检查字符串编码后的获取请求

PHP check get request for string after its been encoded

我需要复制将   >   转换为 Â Â >Â Â 的方法。

我定义了一个常量,用作子类别和父类别之间的分隔符。

define('CATEGORY_SEPERATOR', '  >  ') //(常量可能不同)

$sql .= "GROUP_CONCAT(c.name ORDER BY c.level SEPARATOR "'" . CATEGORY_SEPERATOR ."'") AS name

可能的结果是

row = array( 'name => category1  >  category2 )

类别随后显示为 links

的列表

<li><a href="www.example.com/categories?&name=<?php echo $row['name'];?>"><?php echo $row['name'];?></a></li>

当 link 被点击时,URL 被编码。

地址栏:`www.example.com/categories?name=category1 > category2

我希望能够检查 CATEGORY_SEPERATOR 是否存在于 $_GET['name'] 中。所以我可以执行

$name = $_GET['name'];
$categories = explode(CATEGORY_SEPERATOR, $name);

但是当 $_GET['name'] 到达我的脚本时,它的甜菜已经变质了。

$_GET['name']初值

var_dump : string 'category1Â Â >Â Â category2' (length=27)

stripslashes()后(无变化)

var_dump : string 'category1Â Â >Â Â category2' (length=27)

之后 htmlspecialchars($data, ENT_COMPAT, 'UTF-8');

var_dump : string 'category1Â Â &gt;Â Â category2' (length=30)

现在我通过执行以下操作稍微扭转了它

$_GET['name'] = htmlspecialchars_decode($_GET['name'], ENT_COMPAT);

if(ini_get('magic_quotes_gpc')){ $_GET['name'] = addcslashes($_GET['name']); }

但还是需要从

获取

category1Â Â >Â Â category2&nbsp;&nbsp;&gt;&nbsp;&nbsp;

我试过使用 urldeocde 和 rawurldecode,但没有成功。

反转用于编码的过程将起作用,但不幸的是,在客户端(浏览器)的某个地方,数据在发送到服务器之前正在 changed/corrupted。

这些是对应函数的列表。