PHP,将$_GET元素转换为HTML实体


PHP, convert $_GET elements to HTML entities

编辑:我认为%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)永远不会转换为&rsquo;,因为它是一个完全不同的实体(维基百科)。它可以翻译成&apos;,但PHP不能做到这一点(尽管我不知道原因)。

编辑

虽然URL编码多字节字符集没有标准,但PHP将把字符串视为一组字节,如果这些字节与UTF-8序列匹配,它就会起作用:

php -r 'echo htmlentities(urldecode("%E2%80%99"), ENT_QUOTES|ENT_HTML401);'

应输出

&rsquo;

您可以使用html_entity_encode()html_entity_decode() PHP函数将这些字符转换为html实体,或者在比较之前将它们解码回所需的字符。

您可以尝试使用htmlentities函数将特殊字符转换为相应的html实体。但是在您的情况下,如果数据已经以html实体形式存储在数据库中,那么在查询中使用$_GET参数之前,必须首先通过htmlentities传递数据。