2014-09-11 4 views
1

Мне нужно передать имена файлов через URL, например:Как передать имя файла по URL-адресу?

http://example.com/images/niceplace.jpg 

Проблема у меня в том, когда имя файла содержит символ пробела, например:

http://example.com/images/nice place.jpg 

или

http://example.com/images/nice%20place.jpg 

Для этих двух URL-адресов codeigniter жалуется на пустой символ: «Введенный вами URI имеет запрещенные символы».

Как я могу это исправить?

Я знаю, что могу добавить пустой символ в permitted_uri_chars в config.php, но я ищу лучшее решение, так как в имени файла могут быть другие запрещенные символы.

ответ

0

Я выяснил решение.

URL-адрес создается с помощью rawurlencode().

Затем в контроллере images имя файла декодируется с использованием rawurldecode(html_entity_decode($filename)).

Я успешно протестировал это решение с помощью нескольких специальных символов, о которых я могу думать и с символами UTF-8.

0

Вы можете использовать этот метод:

http://php.net/urlencode

На самом деле, вы столкнетесь с еще вопросов, если файл будет содержать & характер, и несколько других. urlencode избавится от всех возможных проблем.

+2

Он использует codeigniter, и из-за этой структуры он не позволяет ему использовать определенные символы. Так что это не так просто, как просто использование urlencode/urldecode. –

+0

Спасибо @DaveChen, я пытался сделать работу «urlencode» без везения. – emrea

+0

Альтернативно, если вы хотите указать указанный символ в пространстве, то есть% или другие символы, которые разрешены в URL-адресе, затем обновите файл config.php $ config ['allowed_uri_chars'] – k10gaurav

0

Этот параметр конфигурации создан, чтобы избежать передачи некоторых символов в URI, и вы хотите в некоторых случаях обойти его. Я думаю, что наиболее подходящие решения:

  1. Пасс имени файла в качестве параметра - http://domain.com/images/?image=test.jpg
  2. Изъять все alfanumeric символов и может быть каким-то другой (дефис, подчеркивание и т.д.) от имени файла при сохранении его. На мой взгляд, это лучше, потому что в других случаях вы можете столкнуться с другими проблемами с каким-то персонажем.
+0

Первое решение сталкивается с теми же проблемами «запрещенных символов в URI». – emrea

0

Один из лучший способ работы с URL, для указанного условия является для кодирования/шифровать параметры URL, используя класс шифрования/защиты в целях поддержания безопасности URL:

$encrypt=$this->encrypt->encode($param1) & $this->encrypt->decode($encrypt) 

В качестве альтернативы, если вы хотите специальные символы в разрешить в URL-адрес, а затем изменить настройки конфигурации в файле config.php.

File Location: application/config/config.php 
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; 

Добавить все символы в правой части, которые вы хотите разрешить в своем приложении.

Смежные вопросы