Откуда это подчеркивание? Я могу только предполагать магию - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть следующая настройка контроллера тестового набора в рамках codeigniter:

class Test extends Controller {
    public function Test()
    {
        parent::Controller();
    }

    public function index($bla = ''){
        echo $this->uri->segment(3) . '<br/>';
        echo $bla . '<br/>';

        $url = site_url('test') . '/index/' . rawurlencode('foo bar') . '/';

        echo "<a href=\"$url\">click me</a>";
    }

}

Я бы хотел, чтобы $bla выводил 'foo bar', а не 'foo_bar'.Независимо от того, использую ли я rawurlencode, urlencode или вообще ничего, для пробела вставляется символ «_».Я подтвердил, что ссылка на якорь содержит знак% 20, поэтому я не понимаю, почему строка изменяется.

Я включил два снимка экрана, чтобы проиллюстрировать точку, первое изображение показывает, когда к контроллеру не передан ни один аргумент, второе - с переданной ему 'foo bar'.Я просто не понимаю, почему «foo% 20bar» будет изменен?

enter image description here

enter image description here

Ответы [ 4 ]

3 голосов
/ 05 апреля 2011

Он отлично работает в Code Igniter 2.0 на PHP 5.3, но по вашему фрагменту я догадываюсь, что вы не используете 2.0.

Я бы посоветовал попробовать поискать в файле конфигурации.Я не могу сказать вам, какой номер строки не использует ту же версию, что и вы, но ищите что-то вроде этого

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';

И убедитесь, что в нем есть пробел.

Это можеткак бы то ни было, в старых версиях функция сегмента очищала строку перед тем, как передать ее обратно.

Это всего лишь предположение, но оно того стоит.

1 голос
/ 05 апреля 2011

Я рекомендую запустить следующий сценарий вне вашей установки codeigniter, чтобы проверить, не является ли ваша среда разработки неожиданно кодирующей ваш URL.

<?php echo rawurlencode('foo bar');?>

если вы получаете 'foo%20bar', то это должно быть проблема с кодовым указателем. Если это не так, вполне вероятно, что ваша среда php добавляет подчеркивание.

1 голос
/ 05 апреля 2011

Я не проверял это, но вы пробовали:

class Test extends Controller {
    public function Test()
    {
        parent::Controller();
    }

    public function index($bla = ''){
        echo $this->uri->segment(3) . '<br/>';
        echo rawurldecode($bla) . '<br/>';

        $url = site_url('test') . '/index/' . rawurlencode('foo bar') . '/';

        echo "<a href=\"$url\">click me</a>";
    }

}

Я вернусь завтра, когда у меня будет больше времени, но я представляю, что в классе URI происходит что-то смешное. Или, может быть, я просто упускаю это полностью.

0 голосов
/ 09 декабря 2011

Попробуйте изменить конфигурацию на

$config['uri_protocol'] = "QUERY_STRING";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...