หากจะส่งค่าที่เป็น 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 เหมือนเดิม
ไม่มีความคิดเห็น:
แสดงความคิดเห็น