Caratteri chiave non consentiti CodeIgniter

CodeIgniter mi sta dando un errore di Disallowed Key Characters . L’ho ristretto all’attributo name di un campo modulo: name='prod[50-4121.5]' ma non sono sicuro di cosa fare al riguardo.

Il problema è che stai usando caratteri non inclusi nel Regex standard. Usa questo:

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

Come per i commenti (e l’esperienza personale) non dovresti modificare il loro file Input.php – piuttosto, dovresti creare / utilizzare il tuo MY_Input.php come segue:

 < ?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 */ 

++ Supporto per caratteri cinesi

 // 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 

Apri libraries/Input.php ( system/core/Input.php nella versione CI 2.0+) e individua la function _clean_input_keys($str){ , l’intero blocco dovrebbe apparire così:

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

Modifica il PCRE sot che consente i nuovi caratteri.

Per favore, non quello che manca è il . (punto) e dovresti sempre sfuggire al . (punto) in Espressioni regolari in quanto altrimenti consentiranno qualsiasi singolo carattere.

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

Per utilizzare CodeIgniter con jQuery Ajax, utilizzare “Oggetto” come dati al posto della stringa di query come indicato di seguito:

 $.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); } }); 

Php valuterà ciò che hai scritto tra le parentesi [].

 $foo = array('eins', 'zwei', 'apples', 'oranges'); var_dump($foo[3-1]); 

Produrrà string(6) "apples" , perché restituisce $ pippo [2].

Se lo vuoi come stringa, metti le virgolette su di esso.

Ho ricevuto questo errore durante l’invio di dati da un editor di testo RTF in cui avevo incluso una e commerciale. Sostituendo la e commerciale con% 26 – la codifica URL della e commerciale – risolto il problema. Ho anche scoperto che una richiesta jQuery ajax configurata in questo modo risolve magicamente il problema:

 request = $.ajax({ "url": url, type: "PUT", dataType: "json", data: json }); 

dove l’object json è, sorpresa, sorpresa, un object JSON contenente una proprietà con un valore che contiene una e commerciale.

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

Aggiungi. $ Str per uscire (‘Caratteri chiave non consentiti.’); Come: exit (‘Disabilitati caratteri chiave.’. $ Str);

per aiutarti nella ricerca di errori anomali.

Ho avuto lo stesso errore dopo aver postato una mia forma. Ho semplicemente perso la citazione di apertura in uno dei miei attributi di nome di input. Avevo:

Riparazione che ha eliminato l’errore.

Apri libraries/Input.php ( system/core/Input.php nella CI version 2.0+ ) e individua la funzione _clean_input_keys($str){ ,

Modifica if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str)) a if ( ! preg_match("/^[a-z0-9:_\-|]+$/i", $str))

Ho avuto lo stesso problema grazie ai personaggi speciali francesi. Ecco la mia class nel caso qualcuno ne abbia bisogno. Deve essere salvato qui: /application/core/MY_Input.php

(anche questa estensione indicherà che il personaggio strega non è permesso in futuro)

 la class MY_Input estende CI_Input { 

function __construct() { parent::__construct(); } /** * 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. * * @access private * @param string * @return string */ function _clean_input_keys($str) { if ( ! preg_match("/^[a-z0-9:_\/-àâçéèêëîôùû]+$/i", $str)) { exit('Disallowed Key Characters : '.$str); } // Clean UTF-8 if supported if (UTF8_ENABLED === TRUE) { $str = $this->uni->clean_string($str); } return $str; }

}

Leggi il Manuale amichevole sull’estensione delle classi principali: http://ellislab.com/codeigniter/user-guide/general/core_classs.html

Passo 1. Cerca la funzione _clean_input_keys su /system/core/Input.php

Passo 2. Modifica questa linea

exit (‘Caratteri chiave non consentiti.’);

a

exit (‘Caratteri chiave non consentiti.’. $ str);

Fase 3. Aggiorna la pagina per vedere i personaggi che generano l’errore

Fase 4. Se è necessario aggiungere quei caratteri all’elenco delle eccezioni, basta aggiungere a questa riga

if (! preg_match (“/ ^ [a-z0-9: _ / -] + $ | / i”, $ str))

Aggiungo | carattere (pipe) nell’esempio sopra

Ho avuto lo stesso errore dopo aver postato una mia forma. hanno uno spazio per i miei attributi di nome di input. nome di input = ‘first_name’

Riparazione che ha eliminato l’errore.

Nel mio caso, stavo serializzando un modulo di input usando jquery serialize () e poi urlencodandolo usando encodeURIComponent ().

 var datas = form.serialize(); encodeURIComponent(datas); $.getJSON(url,datas,function(){}); 

e codeigniter stava dando l’errore di carattere non consentito.

Ho capito che il problema qui era, jquery serialize fornisce un output codificato e lo stavo codificando nuovamente con il componente encodeURI che non era necessario, e quando codificatore di codice lo decodificava non stava ottenendo la stringa vera e propria poiché qualche parte era codificata due volte. lo spiegherò con un esempio.

 string: quantity[]=1&option=sell urlencoded while serializing: quantity%5B%5D%3D1%26option%3Dsell again urlencoded with encodedURICompontent(): quantity%255B%255D%253D1%2526option%253Dsell 

— a codeigntier

 urldecode: quantity%5B%5D=1&option=sell 

che ha disabilitato i charecter in base alla regex della class di input.

nota: questa non è una risposta a questa domanda, ma aiuterebbe a verificare se si è verificato questo errore … grazie.

In Ubuntu, puoi risolvere il problema cancellando i cookie del tuo browser. Ho avuto lo stesso problema e l’ho risolto in questo modo.

Ci è voluto un po ‘per capire questo. Sembra che la maggior parte di noi abbia mancato l’ovvio errore … l’ultimo “-” non è sfuggito.

Aggiungere il. e | come ho visto altri suggerimenti potrebbero funzionare per te, ma la regex doveva essere:

 if ( ! preg_match("/^[a-z0-9:_\/\-\.|]+$/i", $str)) 

Ho visto questo errore quando stavo cercando di inviare un modulo e, in uno dei nomi dei campi, ho lasciato la parola “endereço”.

 echo form_input(array('class' => 'form-control', 'name' => 'endereco', 'placeholder' => 'Endereço', 'value' => set_value('endereco'))); 

Quando ho cambiato ‘ç’ per ‘c’, l’errore era sparito.

Ho avuto questo problema ma il mio problema era che per errore ho aggiunto uno spazio prima del nome dell’input in questo modo:

  

Quando dovrebbe essere così:

  

L’errore che ho fatto riferimento è stato generato in system / library / Input.php (sulla riga 215 – cercare la funzione _clean_input_keys ($ str).

Il regex non consente il carattere punto in un indice. L’ho cambiato così sarebbe.

Ho lo stesso problema e ho trovato che è nel nome di dominio dell’indirizzo email che è in qualche modo cambiato da . a _ like: name@domain_com invece name@domain.com

Nella mia esperienza, potrebbe essere causato da una syntax incompleta, come:

 $('#teks').val 

invece di

 $('#teks').val() 

Sostituisci il codice sottostante nella funzione _clean_input_keys

  if ( ! preg_match("/^[a-z0-9:_\/-]+$|/i", $str)) { exit('Disallowed Key Characters.\n'); } if (UTF8_ENABLED === TRUE) { $str = $this->uni->clean_string($str); } return $str;