Стрлен переменной GET

0

У меня есть странная ошибка на моем сайте: у меня есть переменная get в url ?getClass=9а По какой-то причине, когда я выводил ее strlen, она на 1 символ больше, чем на самом деле. Например:
9a strlen - 3
10a strlen - 4
11a strlen - 4
Другая странная вещь заключается в том, что, когда я пытаюсь подстроить, используя это strlen:

$classNumber=substr($_GET['getClass'],0,strlen($_GET['getClass']-1));
$classLetter=substr($_GET['getClass'], strlen($_GET['getClass']-1));

Результат выглядит так: 9a $ classNumber = 9 $ classLetter = а, что нормально
10а $ classNumer = 1 $ classLetter = 0a, что неправильно
11a $ classNumber = 11 $ classLetter = a, что снова ок. Что с этим не так?

Теги:
get

2 ответа

2
Лучший ответ

Это правильный ответ был первоначально размещен на user4035 но downvoted и удалены по какой - то причине.


Причина такого поведения заключается в том, что вы используете кириллицу "а", а не латинскую. И он считается символом юникода, представленным 2 байтами. Вам нужно использовать функцию mb_strlen:

<?php
print strlen($_GET['getClass'])."<br>";
print mb_strlen($_GET['getClass'], 'utf8');

Для ввода: "9а" он будет печатать:

3
2

Но если вы используете простой ASCII, функции будут давать тот же результат:

Getclass= 99

2
2
  • 0
    Хорошо, я отмечу ваш ответ, потому что на самом деле проблема была в кириллическом символе, но я использовал gerexp следующим образом: / ^ (\ d +) ([А-Яа-я] +) $ /
4

Вы должны вычитать -1 из результата strlen не из строки.

$classNumber=substr($_GET['getClass'],0,strlen($_GET['getClass'])-1);
$classLetter=substr($_GET['getClass'], strlen($_GET['getClass'])-1);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню