簡體   English   中英

CodeIgniter不允許在查詢搜索詞中使用等號?

[英]CodeIgniter not allowing equal sign in query search term?

我有一個控制器,它接受編碼的代碼並將其設置為會話變量。 然后,我試圖在數據庫中查找該代碼。

當我打印出查詢字符串時,由於某種原因它被排除在外。

/**
 * Pass our signup code for demo purposes
 */
public function c(){

    // Did we come here from a Sign-up Pin?
    $registerPin = $this->uri->segment(3);

    if($registerPin){
        $this->session->set_userdata(array(
            'registerPin'  => $registerPin
        ));
    }

    // Redirect to register
    redirect(site_url("register"));

}

模型:

/**
 * Check to see if a pin is a valid demo pin.
 */
public function check_register_pin($pin){

    $s=$this->db
        ->where(array("p.IsDemoPin" => '1', "p.Denomination" => 20, "p.Pin" => $pin))
        ->where("PinID NOT IN (select PinID from customer_pins where `PinID` = '$pin')")
        ->get("pins as p");

    // If this pin was valid and not used, return true.
    if ($s->num_rows() > 0) {
        return true;
    } else {
        return false;
    }

}

配置:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_=+-';

我試圖查找的示例Pin:

ebe83beb61277ab20882b68444cc93e10391d230758847f85e97428d95b7022aab6cdabff6cac097f2e79ceb2df56e06b227063f627341b97346abdc03106d28sXhvJ2tlUzkAGdGwjuKM6O137GlP5tQ1kvazNFnj/f4=

打印查詢:

SELECT * FROM `pins` as `p` WHERE `p`.`IsDemoPin` = '1' AND `p`.`Denomination` = 20 AND `p`.`Pin` = 'ebe83beb61277ab20882b68444cc93e10391d230758847f85e97428d95b7022aab6cdabff6cac097f2e79ceb2df56e06b227063f627341b97346abdc03106d28sXhvJ2tlUzkAGdGwjuKM6O137GlP5tQ1kvazNFnj' AND `PinID` NOT IN (select PinID from customer_pins where `PinID` = 'ebe83beb61277ab20882b68444cc93e10391d230758847f85e97428d95b7022aab6cdabff6cac097f2e79ceb2df56e06b227063f627341b97346abdc03106d28sXhvJ2tlUzkAGdGwjuKM6O137GlP5tQ1kvazNFnj')

問題是,您用來加密值的類返回一個base64編碼的字符串。 其中包含一個/並且在url中使用時會中斷您的路由。

Base64 不是網址安全的,因為它包含/+=字符。

您可以通過解碼函數返回的內容然后以url安全的方式對其進行編碼來解決此問題,然后可以在url路徑中使用它而不會出現問題:

<?php
/**
 * Decode a url-safe base64 string.
 */
function base64_urldecode($str) {
    $pad = strlen($str) % 4;
    if ($pad) {
        $padlen = 4 - $pad;
        $str .= str_repeat('=', $padlen);
    }
    return base64_decode(strtr($str, '-_', '+/'));
}

/**
 * Encode a string into url safe base64.
 */
function base64_urlencode($str) {
    return str_replace('=', '', strtr(base64_encode($str), '+/', '-_'));
}

$code = base64_decode('ebe83beb61277ab20882b68444cc93e10391d230758847f85e97428d95b7022aab6cdabff6cac097f2e79ceb2df56e06b227063f627341b97346abdc03106d28sXhvJ2tlUzkAGdGwjuKM6O137GlP5tQ1kvazNFnj/f4=');

echo base64_urlencode($code);

將輸出_f4而不是/f4=

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM