Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Непонятная функция - помогите разобраться
Насколько оно безопасно? Есть у кого более приемлимый вариант? Стоит ли использовать всякие strip_tags-ы или htmlspecialchars-ы в дополнение или достаточно того, что я написал выше?
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
этот способ тоже глупый потому что preg_match("/^[а-яА-ЯёЁ]+$/",$str) УЖЕ не пропустит управляющих символов а значит real_escape_string не нужен
htmlspecialchars применяется если присланные данные будут выводиться в браузер
например при регистрации я могу указать вместо имени строку <script>window.location.href="http://mysite.ru"</script>
и если на странице выводится какой-нибудь список имен юзеров то все будут перенаправлены на мой сайт
teddy
Отправлено: 17 Июня, 2013 - 20:22:33
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
LIME
Странно, я слышал что на один preg_match нельзя полагаться, вспомнил и решить уточнить здесь, правда мне не объясняли каким именно образом это можно провернуть, но помню что писали во весь "голос" что бы не полагался на один прег_матч...
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
LIME
Отправлено: 17 Июня, 2013 - 20:36:55
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
teddy пишет:
Я имею ввиду конкретный случай, с моим примером
регулярки хватит за глаза
даже трим не нужен
EuGen пишет:
использовать hex-представление (это будет независимо от локали)
а это как понимать? можно подробнее?
EuGen
Отправлено: 17 Июня, 2013 - 20:52:15
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
LIME
а-яА-Я есть не везде (локаль нужна), а \xC0-\xFF есть везде.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
LIME
Отправлено: 17 Июня, 2013 - 21:15:49
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
наверное я плохо понимаю как работают локали но
причем тут вообще локаль?
разве "а" это не 2байта по сути?
и а-я это не диапазон в таблице между цифрами а(2б) и я(другие 2б)?
и разве "a" не эквивалентно полностью его же написанию в нех?
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
LIME пишет:
разве "а" это не 2байта по сути?
Нет. Сохраните файл в cp - будет 1 байт. В UTF8 - 2 байта. А если в системе нет русской локали, то это "а" в тексте вообще будет нераспознано (и это не компилятор, что сделал бинарный файл - и готово, его вообще-то интерпретатор читает каждый раз). И распознаться оно может как угодно - информация в строке без кодировки смысла не имеет. Да и правка такого файла будет невозможна. Но вот hex-коды универсальны.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
LIME
Отправлено: 17 Июня, 2013 - 21:31:47
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
EuGen пишет:
cp - будет 1 байт
я имел ввиду именно utf для краткости изложения
EuGen пишет:
А если В системе нет русской локали, то это "а" в тексте вообще будет нераспознано
я думал его вообще не "распознают"
просто берут символ с этим кодом и ищут в строке такой же код
кроме случаев с модификатором i или подобных
где важна локаль
имхо это тема для статьи
хотелось бы подробного освещения (Добавление)
кажется догоняю
я считал что таблица utf существует вся "целиком"
видимо в этом ошибка...да?
EuGen
Отправлено: 17 Июня, 2013 - 22:00:42
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Символ, записанный в файл, представляется как набор байт, да. А вот то, что с ним делать - как отображать, как с ним работать - будет решать уже работающая с данными система. Представьте, что Вы запишете в UTF букву "а" - два байта. А затем попытаетесь этот файл исполнить в PHP там, где UTF отсутствует и есть только однобайтная кодировка. Эти два байта будут распознаны как два символа - то есть некорректно.
Иными словами, чтобы работа была корректной, и читающий и пишуший должны придерживаться одних правил письма и распознавания (читайте - протокола). Поэтому не уверен, что тут нужна статья. Символы же шестнадцатиричного представления будут записаны унифицировано. Вернее сказать так - из-за особенности UTF-8, в котором символы первой половины ASCII представляются одним байтом, это самое "\xC0" (внимание - это строка из 4-х символов) представится как 4 байта "\", "x", "C", "0" - что в UTF-8, что в cp (или другой однобайтовой кодировке) - потому что однобайтовые кодировки имеют кодовые страницы, в которых первая половина таблицы символов совпадает у каждой из них и совпадает с тем же ASCII, а, значит, и с UTF-8.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
teddy
Отправлено: 17 Июня, 2013 - 22:39:25
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
EuGen
Интересно, спасибо за полезную информацию! Кстати, регулярка, которую вы написали считает не валидным буквы ёЁ, а все остальное вроде как работает корректно ) Как быть в таком случае? если добавить еЁ вручную, то опять же могут быть проблемы, как вы уже писали выше..
LIME пишет:
трим не нужен
Да, эт я с дуру влепил ) при таком выражении не нужен точно, думаю..
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.