为了账号安全,请及时绑定邮箱和手机立即绑定

CodeIgniter不允许使用关键字符

/ 猿问

CodeIgniter不允许使用关键字符

qq_遁去的一_1 2019-09-05 13:05:55

CodeIgniter不允许使用关键字符

CodeIgniter给了我一个Disallowed Key Characters错误。我已经将它缩小到表单字段的name属性:name='prod[50-4121.5]'但我不知道该怎么做。


查看完整描述

3 回答

?
当年话下

问题是您使用的是未包含在标准正则表达式中的字符。用这个:


!preg_match("/^[a-z0-9\x{4e00}-\x{9fa5}\:\;\.\,\?\!\@\#\$%\^\*\"\~\'+=\\\ &_\/\.\[\]-\}\{]+$/iu", $str)


根据评论(和个人经验),你不应该修改他们的Input.php文件 - 相反,你应该创建/使用自己的文件MY_Input.php,如下所示:


<?php


class MY_Input extends CI_Input {


    /**

     * Clean Keys

     *

     * This is a helper function. To prevent malicious users

     * from trying to exploit keys we make sure that keys are

     * only named with alpha-numeric text and a few other items.

     * 

     * Extended to allow: 

     *      - '.' (dot), 

     *      - '[' (open bracket),

     *      - ']' (close bracket)

     * 

     * @access  private

     * @param   string

     * @return  string

     */

    function _clean_input_keys($str) {

        // UPDATE: Now includes comprehensive Regex that can process escaped JSON

        if (!preg_match("/^[a-z0-9\:\;\.\,\?\!\@\#\$%\^\*\"\~\'+=\\\ &_\/\.\[\]-\}\{]+$/iu", $str)) {

            /**

             * Check for Development enviroment - Non-descriptive 

             * error so show me the string that caused the problem 

             */

            if (getenv('ENVIRONMENT') && getenv('ENVIRONMENT') == 'DEVELOPMENT') {

                var_dump($str);

            }

            exit('Disallowed Key Characters.');

        }


        // Clean UTF-8 if supported

        if (UTF8_ENABLED === TRUE) {

            $str = $this->uni->clean_string($str);

        }


        return $str;

    }


}


// /?/> /* Should never close php file - if you have a space after code, it can mess your life up */

++汉字支持

// NOTE: \x{4e00}-\x{9fa5} = allow chinese characters

// NOTE: 'i' — case insensitive

// NOTE: 'u' — UTF-8 mode

if (!preg_match("/^[a-z0-9\x{4e00}-\x{9fa5}\:\;\.\,\?\!\@\#\$%\^\*\"\~\'+=\\\ &_\/\.\[\]-\}\{]+$/iu", $str) { ... }


// NOTE: When Chinese characters are provided in a URL, they are not 'really' there; the browser/OS

//   handles the copy/paste -> unicode conversion, eg:

//        一二三  -->  xn--4gqsa60b   

//   'punycode' converts these codes according to RFC 3492 and RFC 5891.

//   https://github.com/bestiejs/punycode.js ---  $ bower install punycode




查看完整回答
反对 回复 2019-09-07
?
慕容3067478

打开libraries/Input.phpsystem/core/Input.php在CI版本2.0+中)并找到function _clean_input_keys($str){,整个块应如下所示:

function _clean_input_keys($str){
    if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str))
    {
        exit('Disallowed Key Characters.');
    }

    return $str;}

修改允许新字符的PCRE sot。

请注意,缺少的字符是.(点),你应该总是.在正则表达式中转义(点),否则它们将允许任何单个字符。

/^[a-z0-9:_\/-\.]+$/i



查看完整回答
反对 回复 2019-09-07
?
Qyouu

要将CodeIgniter与jQuery Ajax一起使用,请使用“Object”作为数据而不是Query字符串,如下所示:

$.ajax({
    url: site_url + "ajax/signup",
    data: ({'email': email, 'password': password}), //<--- Use Object
    type: "post",
    success: function(response, textStatus, jqXHR){
        $('#sign-up').html(response);
    },
    error: function(jqXHR, textStatus, errorThrown){
        console.log("The following error occured: "+
                    textStatus, errorThrown);
    }});



查看完整回答
反对 回复 2019-09-07

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信