Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 453
1

128 символов когда их всего 95?

03.01.2023, 09:03. Показов 1741. Ответов 46
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Очень странная багуля. Функция подсчета символов iconv_strlen выдает,
что в имени файла 95 символов, а substr видит в имени файла 128 символов?
128 символов когда их всего 95?

Как это понимать?

Имя файла: Dark Path (ОБТ). Repack от SEREGA-LUS Торрент Скачать моды для STALKER, Сталкер. SpAa-Team.html

HTML5
1
2
3
4
5
6
<form method ="POST" enctype="multipart/form-data">   
1- <input type="file" name="file1" size="10" /><br><br>
2- <input type="file" name="file2" size="10" /><br><br>
3- <input type="file" name="file3" size="10" /><br><br>
<input type="submit" value="Загрузить">
</form>

PHP
1
2
3
4
5
6
7
8
9
10
11
12
$file = $_FILES;
$names = ["file1", "file2", "file3"];
 
foreach($names as $items) {
if(!empty($file[$items]["name"]) ){
if($file[$items]["error"] ==0){
move_uploaded_file($file[$items]["tmp_name"], "Download/". $file[$items]["name"]);
 
echo "Имя файла:". substr($file[$items]["name"], 0, 128).    // по идее вместо 128 должно быть 95
"<br>Кол-во символов в имени файла: ".iconv_strlen($file[$items]["name"]);
}
}}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2023, 09:03
Ответы с готовыми решениями:

Задано текст до 128 символов. Дополнить пробелами до 128 символов. Шифровать тексты таким образом, чтобы каждый символ т
Задано текст до 128 символов. Дополнить пробелами до 128 символов. Шифровать тексты таким образом,...

Найти объем текста, записанного на языке, алфавит которого содержит 128 символов и 2000 символов в сообщении
Найти объем текста, записанного на языке, алфавит которого содержит 128 символов и 2000 символов в...

Длина строки только 128 символов
uses crt; var s:string; begin readln(s); ...

QUOTENAME nvarchar больше 128 символов
Всем привет. Создал хранимую процедуру и вызываю ее с приложение (). Во встроенной функции...

Записать строку длиннее 128 символов в базу MS SQL
Записываю большой текст в базу. ...

46
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 453
03.01.2023, 09:11  [ТС] 2
Онлайн счетчики символов также говорят, что здесь 95 символов.
128 символов когда их всего 95?
0
485 / 320 / 180
Регистрация: 07.11.2022
Сообщений: 556
03.01.2023, 09:53 3
Лучший ответ Сообщение было отмечено G_manX как решение

Решение

Цитата Сообщение от G_manX Посмотреть сообщение
Как это понимать?
substr() считает длину строк в байтах (т.е. корректно считает символы только в однобайтовой кодировке).
Для получения подстрок в многобайтовых кодировках используйте mb_substr()
Для вычисления длины таких строк есть аналогичная функция mb_strlen()
1
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 453
03.01.2023, 10:09  [ТС] 4
rr33rrА как понять однобайтовая у меня кодировка или нет?
Английские буквы считаются однобайтовой?
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,660
Записей в блоге: 14
03.01.2023, 10:13 5
В utf-8, например, переменное количество байт на символ.
Узнайте, какая у вас кодировка.
0
485 / 320 / 180
Регистрация: 07.11.2022
Сообщений: 556
03.01.2023, 10:35 6
Кодировку файла можно посмотреть, например, в Notepad++
Примеры однобайтовых кодировок: ASCII, KOI8, Windows-1251
Широко распространенная UTF-8 — многобайтовая (разные символы могут быть представлены 1,2,3 или 4 байтами).
Английские буквы (в UTF-8) обрабатываются одинаково корректно и однобайтовыми и многобайтовыми функциями, т.к. представлены 1 байтом
0
444 / 574 / 120
Регистрация: 26.02.2019
Сообщений: 3,110
Записей в блоге: 3
03.01.2023, 10:51 7
Цитата Сообщение от G_manX Посмотреть сообщение
Онлайн счетчики символов также говорят, что здесь 95 символов.
Если внимательнее посмотреть, то там кириллицы 33 символа. А так как её не бывает в именах файлов, и в среднем 1 символ "кириллицы" кодируется в 3 правильных символа, то как раз и может получится 128.

Цитата Сообщение от G_manX Посмотреть сообщение
А как понять однобайтовая у меня кодировка или нет?
Просто всегда используй mb_substr(). ...и UTF-8
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,660
Записей в блоге: 14
03.01.2023, 10:53 8
Цитата Сообщение от Lazor Посмотреть сообщение
А так как её не бывает в именах файлов
Почему не бывает?
0
444 / 574 / 120
Регистрация: 26.02.2019
Сообщений: 3,110
Записей в блоге: 3
03.01.2023, 11:00 9
Цитата Сообщение от Rius Посмотреть сообщение
Почему не бывает?
По стандартам. Я даже ссылку дал.
Это последний тебе ответ, рискуя снова испортить себе репу.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,660
Записей в блоге: 14
03.01.2023, 11:02 10
Ну, по ссылке кодировки кириллицы.
А как оттуда следует, что кириллицы не бывает в именах файлов?
Bash
1
2
3
4
5
6
7
8
9
rius@pc:~/demo$ ls -lah
total 8,0K
drwxrwxr-x 2 rius rius 4,0K янв  3 11:00  .
drwxr-xr-x 8 rius rius 4,0K янв  3 10:58  ..
-rw-rw-r-- 1 rius rius    0 янв  3 10:58 '1. кириллица'
-rw-rw-r-- 1 rius rius    0 янв  3 10:58 '2. в'
-rw-rw-r-- 1 rius rius    0 янв  3 10:58 '3. именах'
-rw-rw-r-- 1 rius rius    0 янв  3 10:58 '4. файлов'
rius@pc:~/demo$
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
03.01.2023, 11:09 11
Цитата Сообщение от Rius Посмотреть сообщение
А как оттуда следует, что кириллицы не бывает в именах файлов?
В чистом виде не должно быть. Положено кодировать.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,660
Записей в блоге: 14
03.01.2023, 11:12 12
estic, что такое чистый вид и как это должно выглядеть без кодирования?
0
444 / 574 / 120
Регистрация: 26.02.2019
Сообщений: 3,110
Записей в блоге: 3
03.01.2023, 11:15 13
Цитата Сообщение от estic Посмотреть сообщение
В чистом виде не должно быть. Положено кодировать.
Не просто "не должно быть" - её нет в принципе . Все "неправильные" символы в реальности записаны в коде (юникоде, если я не ошибаюсь). Перекодировкой и отображением занимается ОС и/или другое ПО (файлменеджеры, браузеры и тд.)
Поэтому если на имя такого файла посмотреть в ОС без поддержки кириллицы, то мы увидим "крокозябры" или "ромбики с вопросом".
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
03.01.2023, 11:15 14
Цитата Сообщение от Rius Посмотреть сообщение
что такое чистый вид и как это должно выглядеть без кодирования?
Чистый вид - это бинарное представление в определенной символьной кодировке (utf-8) без кодирования в Base64 и т.п.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,660
Записей в блоге: 14
03.01.2023, 11:16 15
Что такое неправильные символы?
Не латиница?
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
03.01.2023, 11:16 16
Цитата Сообщение от Rius Посмотреть сообщение
Что такое неправильные символы?
Присоединяюсь к вопросу
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,660
Записей в блоге: 14
03.01.2023, 11:17 17
estic, а зачем utf-8 в base64 кодировать в именах файлов?
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
03.01.2023, 11:18 18
Цитата Сообщение от Rius Посмотреть сообщение
а зачем utf-8 в base64 кодировать в именах файлов?
Читайте RFC
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,660
Записей в блоге: 14
03.01.2023, 11:19 19
Цитата Сообщение от estic Посмотреть сообщение
Читайте RFC
Какой номер?
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
03.01.2023, 11:23 20
Цитата Сообщение от Rius Посмотреть сообщение
Какой номер?
Не знаю. Если сами не сможете найти, помогу
0
03.01.2023, 11:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2023, 11:23
Помогаю со студенческими работами здесь

Типы: почему если прибавить единицу к char, получится 128, а не -128?
Если мы прибавляем 1 к максимальному значению unsigned int - результат &quot;0&quot;. Тогда почему если...

SELECT запрос файла 128 мб, PHP скрипт отжимает эти 128 мб, можно ли сэкономить?
error_log(memory_get_peak_usage(true)); error_log(memory_get_usage(true)); Показывают, что...

Ввести с экрана строку символов в 128 байт и записать ее построчно в выходной поток
Разработать и отладить процедуру, выполняющую следующие действия : ввод с экрана строку ...

Создать символьный массив, состоящий из кодов символов 128–255 и вывести его на экран
Здравствуйте. Кто сможет помогите с задачей. Я в ассемблере не очень силен. Уже несколько дней не...

Создать символьный массив, состоящий из кодов символов 128–255 и вывести его на экран
Просмотреть изображения символов второй половины кодовой таблицы (коды 128 – 255, всего 128...

Как стартуют новые сайты, когда там 0 всего
Вероятно придется раскручивать свой сайт, среди вариантов мне очень нравится сайт-гарант...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru