Почему при использовании substr в php, если в тексте есть символ точки, то он считает не корректно?
Доброго дня.
Есть переменная, из которой нужно вытащить последние 3 символа, и сравнить их.
Функцию сделал такую: $item_name_3 = substr($item_name, -3);
Целевые значения для меня, это значения похожие на эти: ".Р1", ".Р2", и т.д.
Важным является именно наличие точки как третий символ с конца строки (отслеживаем версии, ревизии, так в общем по ГОСТу маркируют их)
Когда попадается нецелвая строка, которая заканчивается без доп.версии, просто номером документа, например "ДокРу00001"(начало может быть вообще рандом, бывают документы от 8 до 17 символов в маркировке), то все ок, возвращается "001", но когда попадается целевая строка, например, "ДокРу00001.Р1", то возвращается только "Р1", без точки.
Может это фишка какая-то с точкой и существует другой способ вытащить последние три символа?
П.С.
Можно было бы и без точки сравнивать, но мы столкнулись с другой проблемой, некоторые маркируют неравильно, и не используют точку, получается документ вида "ДокРу00001Р1", и для обработки таких документов, мы сделали отдельную точно такую же функцию, но которая обрабатывает последние два символа, а не три.
Для правильного вопроса надо знать половину ответа
substr работает не с символами, а с байтами. Для многобайтовых кодировок, где один символ может представляться несколькими байтами (кириллица в UTF-8 - два байта на символ) надо использовать библиотеку mbstring. Соответственно, substr заменяется на mb_substr.
Вероятно, у вас эта строка не в однобайтовой кодировке (скорее всего в utf8 работаете).
Для таких строк нужно использовать набор функций для строк в многобайтовых кодировках, в данном случае вам нужна функция mb_substr вместо substr, иначе результат работы функций для однобайтовых кодировок в строках с многобайтовыми - не предсказуем.
PS: не забудьте включить расширение mb_string в конфиге php сервера.