WORKING WITH FILES [encode/decode]

Как передать имя файла через URL?

Для этих двух URL-адресов codeigniter жалуется на пустой символ: «В URI, который вы отправили, были запрещены символы». Как мне это исправить? Я знаю, что я могу добавить пустой символ в permitted_uri_chars в config.php но я ищу лучшее решение, поскольку в имени файла могут быть другие запрещенные символы.

4 ответа

Я понял решение. URL-адрес создается с помощью rawurlencode() . Затем в контроллере images имя файла декодируется с использованием rawurldecode(html_entity_decode($filename)) . Я успешно протестировал это решение с помощью нескольких специальных символов, о которых я могу думать и с символами UTF-8.

Одним из лучших способов работы с 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~%.:_\-'; 

Вы можете использовать этот метод: http://php.net/urlencode На самом деле, у вас возникнут другие проблемы, когда имя файла будет содержать символ & символ, а также несколько других. urlencode избавится от всех возможных проблем.

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

В качестве альтернативы, если вы хотите, чтобы указанный символ для пробела, т. Е.% Или другие символы были разрешены в URL, обновите ваш файл config.php $ config [‘enabled_uri_chars’]

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

  1. Введите имя файла в качестве параметра — http://domain.com/images/?image=test.jpg
  2. Удалите все нефанамерные символы и может быть другим (тире, подчеркивание и т.д.) Из имени файла при его сохранении. На мой взгляд, это лучше, потому что в других случаях вы можете столкнуться с другими проблемами с каким-то персонажем.
Читайте также:  Linux python script as service

Ещё вопросы

  • 0 Скрыть элементы при щелчке вне запускающего элемента
  • 1 ConstraintLayout: анимация translationX для одновременного нажатия кнопки RadioButton и ImageView
  • 1 Показать список из списка viewbag в MVC4
  • 0 При первом нажатии CSS3 работает, но при втором не работает, почему?
  • 1 Тип String.call.call? [Дубликат]
  • 0 Как улучшить плагин автозаполнения jquery
  • 1 URL открытое соединение для адреса ssl выдает исключение утверждения
  • 1 Возможно ли манипулирование CSS-данными через Integer в GWT?
  • 0 Не удается получить .focus () для фокусировки на входе с идентификатором в Chrome, Safari и FF
  • 1 Java Apache Mina, каков риск ошибки слишком большого количества открытых файлов? И как это исправить?
  • 0 Как получить и установить переменную сеанса, используя JQuery в HTML?
  • 0 Слайд-шоу изображений Jquery не начинается с начала
  • 0 Как я могу получить и установить выбранный переключатель во внешнем HTML-контенте с помощью ActionScript?
  • 1 Поиск строк в списке с помощью Loop Return Order
  • 0 Отправка электронной почты с веб-страницы HTML без использования Outlook
  • 0 3D-куб прыгает по оси X, когда я использую glutIdleFunc, чтобы попытаться разместить куб на другой оси X
  • 0 Преобразовать целое число в формат времени, чтобы вы могли рассчитать разницу во времени с ним
  • 0 Я хочу сохранить дату в базе данных, но при отправке формы сохраняет дату как 1970-01-01
  • 1 вставить новый экземпляр, используя API GCE
  • 1 заглушка метода для всех экземпляров класса
  • 0 Doxygen — групповые функции и их поиск по индексу
  • 0 Сконфигурируйте пользовательский интерфейс Angularjs из Java перед загрузкой сетки
  • 1 Разобрать данные и представить изображение PNG
  • 1 Объединение листов Excel в несколько циклов
  • 0 Twiiter Follow Button For Newsletter / Html email
  • 0 Что-то не так с этим кодом C ++
  • 0 Серверная обработка данных jquery в Zend Framework
  • 1 Существует ли свойство взаимодействия PowerPoint, которое описывает монитор для отображения на
  • 1 Отправить электронную почту через Python с помощью Outlook 2016, не открывая его
  • 1 Чтение символов в фоновом приложении
  • 0 Как установить iDisplayLength на стороне сервера в asp.net
  • 1 Использование понимания вложенного списка для проверки и изменения всех столбцов фрейма данных
  • 0 Ошибка подключения к базе данных, статус HTTP 500
  • 1 Добавить новый элемент в XML-файл с помощью Java DOM
  • 0 Множество угловых проектов
  • 3 Не найдено приложение для TargetPlatform.android_x86
  • 1 Конвертировать LUIS Datetime V2 в JS Date
  • 0 Мой текст вращается, но фоновое изображение не
  • 0 Обновлять переменную в каждом тике, используя setInterval () с AngularJS
  • 1 Как удалить элементы из отфильтрованных данных — Vue.js 2.x
  • 0 Выравнивание поля ввода и текстовые эффекты при выравнивании
  • 1 Совместимость с Android + FTDI FT232H
  • 1 Групер и ось должны быть одинаковой длины в Python
  • 0 расположение заголовка не перенаправляется после отправки формы
  • 1 Ошибка Play Console 403 после принятия приглашения
  • 0 Mysql консоль резервного копирования сбой в правильном каталоге с правильным паролем
  • 1 Как использовать sqlite в качестве строкового ресурса вместо strings.xml для языка?
  • 1 Как назначить значение формата ARGB (например, 0xFFFF0000) для Kotlin INT
  • 0 IMG с вызовом JavaScript не работает на Ipad?
Читайте также:  Фриланс питон телеграмм бот

Источник

Удаление специальных символов из имени файла

Я делаю сайт, где люди могут загружать изображения. Однако, когда конечные пользователи загружают изображение, содержащее специальные символы или иностранный символ, изображение загружается, но его нельзя отобразить на веб-сайте, так как изображение не существует на сервере.

Я вижу много людей, отвечающих на другой пост, говоря, что мне нужно использовать preg_replace

Но дело в том, что я не знаю, как его использовать. Как бы я использовал это в моем коде.

Вот мой метод контроллера:

public function upload(Requests\CreatePostsRequest $request) < $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES['fileToUpload']["name"]); $uploadOk = 1; $findme = "."; $pos = strpos($target_file, $findme); //echo $target_file; //dd($_POST); echo ini_get('upload_max_filesize'); echo $_FILES["fileToUpload"]["error"]; $imageFileType = strtolower(substr($target_file,$pos+1)); if(isset($_POST["submit"])) < $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); //$check = true; //dd($check); if($check !== false) < echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; >else < echo "File is not an image."; $uploadOk = 0; >> $filecheck = 0; $orgFileName = $target_file; while (file_exists($target_file)) < $target_file = substr($orgFileName,0,$pos).$filecheck.substr($orgFileName,$pos); $filecheck++; $uploadOk = 1; >if ($_FILES["fileToUpload"]["size"] > 500000000*8) < echo "Sorry, your file is too large."; $uploadOk = 0; >if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"&& $imageFileType != "gif" ) < echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; echo $imageFileType; $uploadOk = 0; >if ($uploadOk == 0) < echo "Sorry, your file was not uploaded."; >else < if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) < echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; $post = new Posts($request->all()); $post->fileToUpload = $target_file; Auth::user()->posts()->save($post); > else < echo "Sorry, there was an error uploading your file."; >> return redirect(''); echo $target_file; > 

Решение

$target_file = $target_dir . preg_replace("/[^a-z0-9\_\-\.]/i", '', basename($_FILES['fileToUpload']["name"])); 

Это удалит все символы, которые не являются буквой (a-z), числом (0-9) или тире, подчеркиванием или точкой (мы хотим сохранить расширение файла). i Флаг в конце делает регистр нечувствительным к регистру.

Читайте также:  Python and mysql programming

Обновить

Чтобы сделать выражение короче, вы можете заменить a-z0-9\_ -часть со словом токен \w ,
Шаблон будет тогда: /[^\w\-\.]/ , Здесь нам не нужны i флаг, так как слово токен обрабатывает это для нас.

Другие решения

Источник

Синтаксическая ошибка в имени файла

Здравствуйте! Написал простую программу для шифрования и дешифрования имен файлов в конкретной папке, но для некоторых файлов выскакивает синтаксическая ошибка. Есть ли функция, которая преобразует запрещенные символы в названии файла туда и обратно или это нужно делать вручную? Какие символы в названии файла запрещены?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
      function Encode( $str ) { for ($i = 0; $i  strlen($str); $i++) { $str[$i] = chr(ord($str[$i]) + strlen($str)); } return $str; } $dir = "TEST"; //Папка с файлами if (! ( $handle = opendir( $dir ) ) ) die( "Cannot open $dir." ); $files = array(); while ( $file = readdir( $handle ) ) { if ( $file != "." && $file != ".." ) { if ( is_dir( $dir . "/" . $file ) ) $file .= "/"; $files[] = $file; } } foreach ( $files as $file ) { rename($dir."/".$file, $dir."/".Encode($file)); echo "Files encoded!"."
"
; } ?>

Источник

Оцените статью