Избегать равных и амперсандных преобразований в PHP - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть переменная 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);, но это не работает.

Как сохранить оригинальные символы?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Ваша проблема не так легко воспроизвести.Следующая демонстрационная программа 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, но могу представить, что там происходит дальнейшая обработка.

0 голосов
/ 25 сентября 2018

Пожалуйста, используйте 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");
...