Разрешить любой символ в URL - PullRequest
       15

Разрешить любой символ в URL

2 голосов
/ 27 сентября 2011

Я хочу доставить URL, используя Post в HTML / PHP с codeIgniter.Поэтому я вывожу свой BASE64-кодированный URL-адрес в скрытом поле, поскольку URL-адрес сканируется со страницы ответа Googles, и в URL-адресе может содержаться практически любой символ.Поскольку я буду использовать свой веб-сайт только на локальном сервере (это инструмент SEO для моей компании), я хочу включить любой символ в данных POST.Я уже пробовал это с $config['permitted_uri_chars'] = '';, но это не сработало.Я получил ошибку «Запрещенные ключевые символы», потому что строка Base64 содержит =.

Я использую CodeIgniter 2

Правка:

Ответ Фивелла был правильным,Благодарю.Итак, для заинтересованных людей я взял код по ссылке Fivell выше и написал небольшой класс для CodeIgniter.Для этого добавьте файл с именем Base64 в папку приложения / библиотеки и вставьте этот код:

<?php

class Base64 {

    function url_encode($url) {
        $data = base64_encode($url);
        $data = str_replace(array('+','/','='),array('-','_',''),$data);
        return $data;
    }

    function url_decode($url) {
        $data = str_replace(array('-','_'),array('+','/'),$url);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        return base64_decode($data);
    }

}

?>

, затем вы можете использовать его в любом контроллере, загрузив библиотеку с помощью $this->load->library('base64); и en- или расшифровать URL с помощью $this->base64->url_encode($url) или $this->base64->url_decode($url)

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Это не проблема codeigniter, base64 не безопасна для передачи POST. Я использую эту пару функций для безопасного кодирования / декодирования данных POST.

/**
 *
 * Safely encrypts data for POST transport
 * URL issues
 *  transforms + to spaces
 *  / are param value separators
 *  = are param value separators
 *
 *  we process the string on reverse
 * @param string $string
 */
function my_urlsafe_b64encode($string)
{
    $data = base64_encode($string);
    $data = str_replace(array('+','/','='),array('-','_','.'),$data);
    return $data;
}

/**
 *
 * The encoding string had to be specially encoded to be transported
 * over the HTTP
 *
 * The reverse function has to be executed on the client
 *
 * @param string $string
 */
private function urlsafe_b64decode($string)
{
  $data = str_replace(array('-','_','.'),array('+','/','='),$string);
  $mod4 = strlen($data) % 4;
  if ($mod4) {
    $data .= substr('====', $mod4);
  }
  return base64_decode($data);
}
1 голос
/ 27 сентября 2011

http://www.php.net/manual/ru/function.base64-encode.php#63543

Я думаю, что проблема заключается в стандартном кодировании / декодировании base64 в php, которое небезопасно для URL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...