编辑:我认为%27
实际上是错误的报价。尽管如此,我仍然被卡住了,我找不到一个PHP函数来完成我想要的转换。
编辑(再次):我找到了一个解决方案,将%26rsquo%3bs
粘贴到URL中,然后它变成’
。它是有效的,所以我把它作为答案发布在下面,但我仍然有兴趣了解如何使用PHP函数。
我正在开发一个使用PHP树的网站,就像它是一个目录一样。例如,如果有人键入index.php?foo=visual programming
(或index.php?foo=visual%20programming
),则网站会打开项目"Visual Programming"(我使用的是strtolower()
)。
另一个工作示例是index.php?foo=visual programming&bar=animated path finder
,它打开了"动画路径查找器",这是"视觉编程"的子代。
问题是,有些项目被命名为"康威’
的生活游戏",它使用了HTML实体。我猜应该有人键入什么来打开这个,应该是index.php?foo=visual%20programming&bar=conway%27s%20game%20of%20life
。问题是'
不是===
到’
。
我需要做些什么才能让它发挥作用?以下是我基于$_GET
(PHP位于<script type="text/javascript">
内部)选择项目的代码:
<?php
function echoActiveDirectory($inTree) {
// Compare $_GET with PhpTree
$itemId = 0;
foreach ($_GET as $name) {
if ($inTree->children !== null) {
foreach ($inTree->children as $child) {
if (strtolower($child->title) === strtolower($name)) {
$itemId = $child->id;
$inTree = $child;
break;
}
}
}
}
// Set jsItems[$itemId].selected(), it will be 0 if nothing was found
echo "'t'tjsItems[".$itemId."].selected();'n";
}
echo "// Results of PHP echoActiveDirectory('$root)'n";
echoActiveDirectory($root);
?>
该网站正在进行中,但可以在此处进行测试,以查看$_GET
的工作情况:http://alexsimes.com/index.php
十六进制代码%27
(十进制39)永远不会转换为’
,因为它是一个完全不同的实体(维基百科)。它可以翻译成'
,但PHP不能做到这一点(尽管我不知道原因)。
编辑
虽然URL编码多字节字符集没有标准,但PHP将把字符串视为一组字节,如果这些字节与UTF-8序列匹配,它就会起作用:
php -r 'echo htmlentities(urldecode("%E2%80%99"), ENT_QUOTES|ENT_HTML401);'
应输出
’
您可以使用html_entity_encode()
和html_entity_decode()
PHP函数将这些字符转换为html实体,或者在比较之前将它们解码回所需的字符。
您可以尝试使用htmlentities函数将特殊字符转换为相应的html实体。但是在您的情况下,如果数据已经以html实体形式存储在数据库中,那么在查询中使用$_GET参数之前,必须首先通过htmlentities传递数据。