2011-09-27 8 views
2

codeIgniter가있는 HTML/PHP의 게시물을 사용하여 URL을 전달하고 싶습니다. 따라서 URL은 Google 응답 코드에서 크롤링되고 URL에 거의 모든 문자가 포함될 수 있으므로 숨겨진 필드에 BASE64 인코딩 된 URL을 출력합니다. 로컬 서버 (내 회사의 SEO 도구)에서만 내 웹 사이트를 사용할 것이므로 POST 데이터에서 모든 문자를 사용 가능하게하려고합니다. 이미 $config['permitted_uri_chars'] = '';으로 시도했지만 작동하지 않았습니다. Base64 문자열에 =이 포함되어 있기 때문에 '허용되지 않는 키 문자'오류가 발생합니다. 내가 CodeIgniter의 2를 사용하고URL에 임의의 문자 허용

편집 :

Fivell의 대답은 옳았다, 감사합니다. 그래서 관심있는 사람들에게 위의 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) 또는

답변

1

이것은 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); 
} 
관련 문제