Percentagem Símbolo no CodeIgniter URI
-
06-07-2019 - |
Pergunta
Eu preciso passar uma string codificada para um controlador CodeIgniter.
DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/
O meu problema é o símbolo por cento que é um caractere não permitido. Eu tentei mudar o arquivo de configuração com o seguinte:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+\%';
O +
é ok, mas o %
não é válido. Você pode me ajudar a mudar esta exp reg por isso vai permitir que o símbolo %
? Agradecemos antecipadamente!
Solução
Coloque o " - " no final da corda caso contrário ele é interpretado como gama. O% já está na lista de caracteres permitido como você pode ver.
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-';
Aham ... depois de olhar para a sua cadeia de amostra novamente. Aqui é por isso que você começa "The URI you submitted has disallowed characters
".
Breve explicação : Adicione o comercial & para a lista de caracteres permitidos
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+&-';
explicação longa
Existem 2 coisas que brincam juntos.
A) cheques Mercante todos os URI segmentos para caracteres não permitidos. Isso acontece por whitelisting caracteres permitidos. Quais são permitidas pode ser verificado in / system / application / config / config.php na variável $config['permitted_uri_chars']
. O valor padrão é definido como algo como 'a-z 0-9~%.:_-'
. Assim, todas as letras de A a Z, espaço, todos os números e os caracteres * ~%:.. São permitidos _-
Ok, vamos comparar isso com sua amostra URI que você diz obras
a-z 0-9~%.:_-
DO_SOMETHING/Coldplay/Fix+You/273/X+26+Y/ //note the missing %
Todos os personagens são ok ... mas esperar o que acontece com o sinal de adição + ? Não é na lista de caracteres permitidos! E ainda o URI não se queixaram? Esta é a chave para o seu problema.
Estas duas coisas combinadas explicar também por que esse URI específico não funciona.
urldecode(DO_SOMETHING/Coldplay/Fix+You/273/X+%26+Y/) //evaluates to
//DO_SOMETHING/Coldplay/Fix You/273/X & Y/
Whoops ... o urldecoding traduz % 26 para um &
Que não é um caractere permitido. Mistery ;-) resolvido
Outras dicas
tente o seguinte: $ Config [ 'uri_protocol'] = "PATH_INFO";