PHP, точка с запятой. Символ один, свойства разные.

DV
На сайте с 01.05.2010
Offline
644
1577

Посмотрите файл во вложении, совсем маленький, на 4 строки. Копипаст не работает, эффект теряется! Попробуйте его запустить, что выдаст.

Из-за этой непонятности долго думал, почему strpos добавляет лишние 3 символа к позиции. Возможно, это какая-то известная feature?

zip b.php.zip
VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
DV
На сайте с 01.05.2010
Offline
644
#1

Уже вижу, что некоторые редакторы узрели кучу служебных символов. PHP же не хочет.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#2

А с UTF-8 проблем не будет? А то файл в нём, в мануале много функций именно для UTF-8

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
DV
На сайте с 01.05.2010
Offline
644
#3

LEOnidUKG, а вот не знаю даже. Не встречался в практике.

edogs software
На сайте с 15.12.2005
Offline
775
#4

п » ї

который в первой строке перед ; а во второй строке после ; это последовательность 0xEF, 0xBB, 0xBF - BOM

http://ru.wikipedia.org/wiki/UTF-8#.D0.9F.D0.BE.D1.80.D1.8F.D0.B4.D0.BE.D0.BA_.D0.B1.D0.B0.D0.B9.D1.82.D0.BE.D0.B2_.28BOM.2C_.D1.81.D0.B8.D0.B3.D0.BD.D0.B0.D1.82.D1.83.D1.80.D0.B0.29

Многие программы Windows (включая Блокнот) добавляют байты 0xEF, 0xBB, 0xBF в начале любого документа, сохраняемого как UTF-8. Это метка порядка байтов Юникода (англ. Byte Order Mark, BOM), также её часто называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature). По наличию сигнатуры программы могут автоматически определить, является ли файл закодированным в UTF-8, однако файлы с такой сигнатурой могут некорректно обрабатываться старыми программами, в частности xml-анализаторами. Такие редакторы, как Notepad++, Notepad2 и Kate, позволяют явно указывать, следует ли добавлять сигнатуру при сохранении UTF-файлов.

Например: В файле записана одна латинская буква "a".

Если кодировка этого файла UTF-8 with Signature, то он будет содержать: EF BB BF 61
Если кодировка этого файла UTF-8 (без сигнатуры), то он будет содержать: 61

он как бы "не виден" в utf-8, потому что http://ru.wikipedia.org/wiki/Byte_order_mark

Если символ спецификации (BOM) появится в середине потока данных, Unicode говорит, что это должно быть истолковано как "нулевой ширины неразрывный пробел" (по существу нулевой символ).

однако вполне себе заметен если открывать файл в ansi/cp1251 или бинарном редакторе.

ord функция "Возвращает ASCII-код первого символа строки string" (а не в юникоде), первый символ тут действительно получается разный, поэтому в первом случае это "п", а во втором это ";" соответственно. Или конвертируйте все в cp1251/ascii или работайте в utf-8.

К strpos это тоже относится.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
DV
На сайте с 01.05.2010
Offline
644
#5

edogs, доходчиво, спасибо!

---------- Добавлено 24.03.2012 в 21:46 ----------

Про BOM, конечно же, знал, но не ожидал встретить посреди обрабатываемой строки! Точка с запятой — разделитель CSV, который надо распарсить.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий