26 พฤศจิกายน 2555

Codeigniter ส่งค่าที่เป็น Url ผ่านทาง Url

 หากจะส่งค่าที่เป็น Url  เช่น http://www.google.co.th ผ่านทาง Url หรือที่รู้จัก คือ ส่งแบบ GET นั่นเอง ซึ่งในการรับค่า GET ของ Codeigniter มันจะแบ่งค่าบน Url ด้วย / ซึ่งมันจะตัดส่วน http กับ www.google.co.th ออกจากกัน

แต่หากต้องการที่จะรับส่งโดยไม่ต้องนำมาต่อให้ยุ่งยาก ก็เลยต้องใช้ base64_encode / base64_decode เข้ามาใช้งานเพื่อแปลง http://www.google.co.th แล้วส่งค่าไปครั้งเดียว


ซึ่งค่าของ http://www.google.co.th เมื่อเข้าฟังชั่น base64_encode ก็จะได้ค่าประมาณนี้ aHR0cDovL3d3dy5nb29nbGUuY28udGg= จะมีตัวเครื่องหมายเท่ากับ (=) ต่อท้าย ซึ่งตัว Codeigniter จะไม่ยอมให้ส่งเครื่องหมายเหล่านี้ วิธีแก้ไขก็แก้ไขตามนี้

http://www.technologyrider.com/fixed-%E2%80%9Cthe-uri-you-submitted-has-disallowed-characters-%E2%80%9D-codeigniter-ci-error

และอีกวิธีซึ่งไม่ต้องไปแก้ไขโค้ดของ Codeigniter

function encode_url($url){
  $base_64 = base64_encode($url);
  $url_param = rtrim($base_64, '=');
  $url_param = str_replace(array('+', '/'), array(',', '-'), $url_param);
  return $url_param;}

ใช้งาน

<a href="<?php echo base_url('welcome/test/'.encode_url(').'') ?>">Test</a>

ก็จะได้ Url แบบนี้ /welcome/test/aHR0cDovL3d3dy5nb29nbGUuY28udGg  หลังจากนั้น ก็ไปทำการรับค่า แล้ว base64_decode ค่าที่ได้ ตามนี้

function decode_url($url){
   $base_64 = $url.str_repeat('=', strlen($url) % 4);
   $base_64 = str_replace(array(',', '-'), array('+', '/'), $base_64);
   $data = base64_decode($base_64);      
   return $data;
}
echo decode_url($this->uri->segment(3));

ค่าที่ได้ของ $this->uri->segment(3) หลังจากแปลงแล้วก็จะกลับมาเป็น http://www.google.co.th เหมือนเดิม

ไม่มีความคิดเห็น:

แสดงความคิดเห็น