URL закодировал наклонные черты вправо, повреждающие мое codeigniter приложение

В соответствии с вашим вопросом вам нужно представление прокрутки с динамическим содержанием в нем. Вы можете решить свою проблему двумя способами. Сначала используется Tableview вместо представления прокрутки. Но я постараюсь ответить на ваши вопросы с вашей реализацией.

  • Добавьте ScrollView в ViewController с ограничением сверху, снизу, впереди и трейлингом с его суперпредставлением.

  • Добавьте StackView с ограничением в начале, в конце, сверху и снизу.

  • Всякий раз, когда вы добавляете контент StackView программным способом, вызывайте self.view.layoutIfNeeded() и self.view.layoutSubviews().

  • Окончательно установите размер содержимого для просмотра с прокруткой. scrollView.contentSize = CGSize(width:CGFloat, height: CGFloat)

13
задан 22 November 2008 в 21:30
поделиться

4 ответа

Я думаю сообщение об ошибке, которое Вы получаете, не от codeigniter, а от Вашего веб-сервера.

Я копировал это использование Apache2, даже не используя CodeIgniter: Я создал файл index.php и затем получил доступ index.php/a/b/c - это хорошо работало. Если я затем пытался получить доступ index.php/a/b/c%2F Я получил 404 от Apache.

Я решил его путем добавления к моей конфигурации Apache:

AllowEncodedSlashes On

См. документацию для получения дополнительной информации

После того как Вы сделали это, Вы, возможно, должны были бы возиться с $config['permitted_uri_chars'] в codeigniter, если это все еще не работает - можно найти, что наклонные черты отфильтрованы

9
ответ дан 2 December 2019 в 00:47
поделиться

Один способ обойти эту проблему состоял бы в том, чтобы заменить любые наклонные черты вправо в Вашей переменной URL, которая Вы являетесь передающими в сегментах URI с чем-то, что не повредило бы синтаксический анализатор CodeIgniter URI. Например:


$uri = 'example.com/index.html';
$pattern = '"/"';
$new_uri = preg_replace($pattern, '_', $uri);

Это заменит все Ваши наклонные черты вправо с символами нижнего подчеркивания. Я уверен, что это подобно тому, что Вы делаете для кодирования наклонных черт вправо. Затем, когда получение значения на другой странице просто использует что-то как следующее:


$pattern = '/_/';
$old_uri = preg_replace($pattern, '/', $new_uri);

Который заменит все символы нижнего подчеркивания наклонными чертами вправо для возвращения старого URI. Конечно, Вы захотите удостовериться безотносительно символа, который Вы используете (подчеркивание в этом случае) не будет присутствовать ни в одном из возможных URIs, которые Вы будете передавать (таким образом, Вы, вероятно, не захотите использовать подчеркивание вообще).

4
ответ дан 2 December 2019 в 00:47
поделиться

С CodeIgniter путь URL соответствует контроллеру, функции в контроллере и параметрам к функции.

Ваш URL, /app/process/example.com/index.html, соответствовал бы app.php контроллеру, функция процесса внутри и два параметра example.com и index.html:

<?php
class App extends Controller {
    function process($a, $b) {
       // at this point $a is "example.com" and $b is "index.html"
    }
}
?>

править: В перечитывании Вашего вопроса кажется, что Вы хотите интерпретировать часть URL как другой URL. Чтобы сделать это, необходимо записать функцию для взятия переменного количества аргументов. Чтобы сделать это, можно использовать функции func_num_args и func_get_arg следующим образом:

<?php
class App extends Controller {
    function process() {
        $url = "";
        for ($i = 0; $i < func_num_args(); $i++) {
            $url .= func_get_arg($i) . "/";
        }

        // $url is now the url in the address
    }
}
?>
0
ответ дан 2 December 2019 в 00:47
поделиться

Измените индекс allowed_uri_chars в файле конфигурации

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
0
ответ дан 2 December 2019 в 00:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: