Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 103

Почему fgetc возвращает символы?

09.02.2016, 16:03. Показов 1181. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, столкнулся с проблемой:
Хотел посимвольно прочитать текст из файла, выполняю это при помощи fgetc, но выдает символы �
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
  $text = fopen("$DOCUMENT_ROOT/input.txt", 'rb');
  $lengthtext = strlen(fgets($text));
  echo $lengthtext;
  rewind($text);
  $testc = fgetc($text);
  echo $testc;
  $testc = fgetc($text);
  $testc = fgetc($text);
  $testc = fgetc($text);
  echo $testc;
  fclose($text);
  ?>
Если в файле находится, например строка: "приезжаю шестого", в браузере выводится
34��
И почему strlen() выводит 34 символа когда их всего 16? каким образом??
P.S. правда я пробывал считывать по другому, но там работал только транслит, русские буквы отображались также, в чем проблема? Заранее спасибо.
P.P.S везде UTF-8 стоит.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.02.2016, 16:03
Ответы с готовыми решениями:

Не работает fgetc
Есть вот такая конструкция: while (!feof($file)) { $char = fgetc($file); if...

Функция fgetc() и кодировка
В сети взял пример: &lt;?php $fp = fopen(&quot;counter.txt&quot;, &quot;r&quot;); // Открываем файл в режиме чтения...

mysqli_insert_id не возвращает ID вставленной записи, постоянно возвращает "1".
Есть запрос такой расчитываю через insert_id получить id добавленной книги, но почему-то возвращает...

10
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
09.02.2016, 16:13
Цитата Сообщение от GRAFMC Посмотреть сообщение
почему strlen() выводит 34 символа когда их всего 16?
Для utf8 (и других двухбайтовых кодировок) - mb_strlen().
Цитата Сообщение от GRAFMC Посмотреть сообщение
в чем проблема
Ещё раз проверьте везде кодировку, включая и сам скрипт, и считываемый файл.
1
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 103
09.02.2016, 16:25  [ТС]
mb_strlen() нормально работает, спасибо.
Цитата Сообщение от Jodah Посмотреть сообщение
Ещё раз проверьте везде кодировку, включая и сам скрипт, и считываемый файл.
Проверил, в считываемом файле и в самом скрипте utf-8 стоит. Может быть еще в чем то проблема может быть?
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
09.02.2016, 16:30
Цитата Сообщение от GRAFMC Посмотреть сообщение
Проверил, в считываемом файле и в самом скрипте utf-8 стоит. Может быть еще в чем то проблема может быть?
В Notepad++ Кодировки -> Преобразовать в UTF-8 без BOM.
Должно помочь.
1
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 103
09.02.2016, 16:48  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
В Notepad++ Кодировки -> Преобразовать в UTF-8 без BOM.
Должно помочь.
Теперь отображается Ѐ
(если с подсчетом кол-ва символов, то выводится так: 16Ѐ)
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
09.02.2016, 17:09
Вот тут гляньте

Добавлено через 17 минут
Кое что нашел.
Конечно не уверен, что сработает, но попробуйте Ѐ заменить в коде str_replace() или preg_replace(); прописав символ одним из способов:
Юникод - U+0400
UTF-8 - D0 80
1
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 103
09.02.2016, 17:25  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
Вот тут гляньте
Поигрался с этой таблицей, поперебрал почти все, не помогло.

Добавлено через 10 минут
Цитата Сообщение от Пифагор Посмотреть сообщение
Конечно не уверен, что сработает, но попробуйте Ѐ заменить в коде str_replace() или preg_replace(); прописав символ одним из способов:
Юникод - U+0400
UTF-8 - D0 80
Теперь снова �
мб проблема в сервере?
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
09.02.2016, 17:37
Не могу сказать точно.
Судя по виду, это, скорее всего, символы переноса строки и возврата каретки. И они неверно отображаются.
1
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 103
09.02.2016, 17:50  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
Судя по виду, это, скорее всего, символы переноса строки и возврата каретки. И они неверно отображаются.
Кстати, у меня был вопрос еще насчет переноса строки, потому что \n просто так не переносил строку, но в блокноте этот "пустой" символ был но строку не переносил, переносилась строка только если сделать как то так:\n\r
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
09.02.2016, 18:01
Я тут вот что нарыл в мануале про fgets():
Возвращает строку размером в length - 1 байт, прочитанную из дескриптора файла, на который указывает параметр handle. Чтение заканчивается, когда количество прочитанных байтов достигает length - 1, по достижении конца строки (который включается в возвращаемое значение) или по достижении конца файла (что бы ни встретилось первым). Если длина не указана, по умолчанию ее значение равно 1 килобайту или 1024 байтам.
Может это совпадение, но Ѐ HTML-мнемокод: &#1024

Добавлено через 4 минуты
Вы же сразу и длину символов считаете, и длину файла.
PHP
1
strlen(fgets($text);
Добавлено через 1 минуту
Адлина файла у Вас не указана. Значит, она равна 1 килобайту или 1024 байтам.
1
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 103
09.02.2016, 18:36  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
Адлина файла у Вас не указана. Значит, она равна 1 килобайту или 1024 байтам.
Если даже задать другую длинну считывания, выводится тоже самое. И даже если вообще закоментировать fgets и его вывод, ничего не изменилось...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2016, 18:36
Помогаю со студенческими работами здесь

GET запрос возвращает unicode символы
Я использую cURL, и после отправки get запроса я получаю следующий html код: $rezult =...

Ajax не возвращает с базы символы ©,™,®
Такая проблема, в базе mysql в названиях некоторых товаров присутствуют символы ©,®, TM. При...

substr_count() - всегда возвращает 0. Почему? (Код в теме)
Почему $bank всегда = 0? И есть ли альтернативные способы решения такой задачи? &lt;? $asdban =...

почему mysql_fetch_array возвращает два значения а не четыре?
имеется mysql-таблица table, с полями: id и name. $v=mysql_query(&quot;select * from table&quot;);...

Почему MySql всегда true возвращает?
tml&gt; &lt;title&gt;Регистрация&lt;/title&gt; &lt;body&gt; Форма для регистрации&lt;br&gt; &lt;form&gt; &lt;input...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru