在 PHP 中避免相等和符号转换

Avoiding equal and ampersand conversion in PHP

我有一个包含一些特殊字符的 php 变量,在 Codeigniter 3 控制器中:

page_url = 'search=' . $expression . '&page';

在模板中,我使用这个变量:

<a href="<?php echo $page_url; ?>"></a>

在浏览器中,我以这种形式看到上面提到的字符:

posts/search?search%3Dharum%26page=2

=符号变为%3D,“&”变为%26

我尝试了 page_url = urldecode($page_url); 但它不起作用。

如何保留原始字符?

请使用utf8解码后重试

echo utf8_decode(urldecode("search%3Dharum%26page=2"));

试试这个解码功能。

function decode($url)
{
    $special = array(
        '%21' => '!', '\' => '%5C', // so on you need to define.
    );

    foreach($special as $key => $value)
    {
        $result = str_replace($key, $value, $url);
    }

    return $result;
}

echo decode("search=%21");

你的问题不是那么容易重现。以下 rextester 演示基本上使用您的代码以您请求的形式生成文本:http://rextester.com/YTY13099

<?php
$page=2;
$expression='harum';

$page_url = 'posts/search?search=' . $expression . '&page=' . $page;

?>

<a href="<?php echo $page_url; ?>"></a>

导致

<a href="posts/search?search=harum&page=2">Link</a>

问题可能是由脚本是 codeigniter 控制器的一部分这一事实引起的吗?我对 codeigniter 一无所知,但我可以想象在那里进行了进一步的处理。