2

编辑:我认为%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打开“动画路径查找器”,它是“可视化编程”的子项。

问题是其中一些项目被命名为“Conway ’s Game of Life”之类的东西,它使用了一个 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

4

3 回答 3

1

十六进制代码%27(十进制 39)永远不会转换为&rsquo;,因为它是一个完全不同的实体(维基百科)。它可以翻译成&apos;,但 PHP 不这样做(虽然我不知道原因)。

编辑

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

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

应该输出

&rsquo;

于 2013-07-31T10:22:06.720 回答
0

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

于 2013-07-31T06:54:43.447 回答
0

您可以尝试使用htmlentities函数将特殊字符转换为相应的 html 实体。但是在您的情况下,如果数据已经作为 html 实体形式存储在 db 中,则来自 $_GET 参数的数据必须首先通过 htmlentities 传递,然后才能在查询中使用它。

于 2013-07-31T11:16:26.690 回答