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 :: Непонятная функция - помогите разобраться [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Без описания
teddy
Отправлено: 17 Июня, 2013 - 23:15:48
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




EuGen
Благодарю, главное теперь знаю, в какую строну нужно смотреть )
 
 Top
Hapson
Отправлено: 17 Июня, 2013 - 23:28:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


А вот с этим что?
Мой пост
??? Непонял!

(Отредактировано автором: 17 Июня, 2013 - 23:28:43)



-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
armancho7777777 Супермодератор
Отправлено: 18 Июня, 2013 - 08:28:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Hapson пишет:
{1,

Логин, пароль могут состоять из одного символа ?
 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Июня, 2013 - 11:56:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




EuGen пишет:
информация в строке без кодировки смысла не имеет. Да и правка такого файла будет невозможна. Но вот hex-коды универсальны.
Так я лучше и на входе буду ожидать ожидаемые utf-8, а не чёрт-те-что, и если мне суют не utf-8, логично отправить восвояси.

teddy пишет:
$str = $db->real_escape_string(trim($_POST['str']));
Если в $_POST['str'] будет массив - твой скрипт упадет (с зависимости от уровня выводимых ошибок, но тем не менее).
 
 Top
LIME
Отправлено: 18 Июня, 2013 - 12:21:11
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а как тогда быть с модификатором u
что произойдет в системе без utf при указании этого модификатора?
он будет проигнорирован?(ведь и проверить даже негде Радость )
DeepVarvar пишет:
ожидаемые utf-8, а не чёрт-те-что
вот и я думаю
и вообще что-то все-равно не понял
ну не будет в системе utf и что?
буква "а" будет воспринята как 2 других символа(хз каких)
чем это хуже hex?
 
 Top
teddy
Отправлено: 18 Июня, 2013 - 12:29:09
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




DeepVarvar пишет:
Если в $_POST['str'] будет массив - твой скрипт упадет (с зависимости от уровня выводимых ошибок, но тем не менее).


Тоесть? $_POST это как бы и есть array и все нормально отрабатывает Улыбка Но если вы имели ввиду передачу $_POST-ом что то вроде $arr = array(); то не понимаю зачем оно нужно вообще. При правильной фильтрации данных такой код и не пропустится...

Как понять упадёт? ) Понятие растяжимое, можно подробнее? Какие ошибки могут произойти и почему? И как это лечить если real_escape_string "падает" по неизвестным мне причинам...

P.S: Ни в коем случае не воспринимать данный пост в качестве "спора"... Я лишь хочу получить ответы на свои вопросы и при этом показал как я понимаю данный скрипт... ключевые моменты выделил болдом...

Протестил, вроде ошибок нет вообще. error_reporting включен на полную катушку...

(Отредактировано автором: 18 Июня, 2013 - 12:51:10)

 
 Top
EuGen Администратор
Отправлено: 18 Июня, 2013 - 12:35:15
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




LIME пишет:
буква "а" будет воспринята как 2 других символа(хз каких)
чем это хуже hex?

Тем, что работа будет неверной. Например, предположим, что эти два байта будут интерпретированы как буквы p и q (это на самом деле не так, но не важно) - тогда, скажем, условие if(preg_match('/^[а]+$/')) - означающее, что строка должна состоять только из букв "а" кириллицы, будет интерпретирована как if(preg_match('/^[pq]+$/')) - что, согласитесь, совсем не то. И это один из самых "безобидных" примеров.
LIME
Вообще, Вы упоминали, что прочли "Джоэл о программировании" - но там есть целая глава, которая в очень наглядной форме поясняет смысл кодировок и представления информации в них. Странно, что возникают такие вопросы.

Кажется, понял, отчего у Вас непонимание. Суть в том, что кириллическое "а" при сохренении будет сохранено как 2 байта, а, скажем \xC0 - как 4 байта - по байту на \, x, C, 0 - потому что в файл оно сохранится ровно так, как записано. Это уже после интерпретатором оно будет разобрано корректно, но храниться оно будет как 4 байта и никак иначе


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LIME
Отправлено: 18 Июня, 2013 - 12:40:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а разве 2 символа в hex не будут также восприняты как
EuGen пишет:
как буквы p и q (это на самом деле не так, но не важно)
?
EuGen пишет:
Вообще, Вы упоминали, что прочли "Джоэл о программировании" - но там есть целая глава, которая в очень наглядной форме поясняет смысл кодировок
да...не вижу связи между кодировкой и представления тогоже символа в hex
(Добавление)
EuGen пишет:
Кажется, понял, отчего у Вас непонимание. Суть в том, что кириллическое "а" при сохренении будет сохранено как 2 байта, а, скажем \xC0 - как 4 байта - по байту на \, x, C, 0 - потому что в файл оно сохранится ровно так, как записано. Это уже после интерпретатором оно будет разобрано корректно, но храниться оно будет как 4 байта и никак иначе
алилуйя))...спасибо большое за разъяснения
(Добавление)
всеравно...ведь тогда будут пропущены не кирилические символы
как сказал кто-то из великих чёрт-те-что
чем же это корректнее
интересует как поведет себя регулярка в случае указания кириллицы и отсутствия оной в системе
 
 Top
EuGen Администратор
Отправлено: 18 Июня, 2013 - 12:49:15
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




LIME
Верно. Связь с кодировкой - это я все свои комментарии имел ввиду именно сохранение в файл и последующее его прочтение (на уровне ОС+ФС). То есть если в самой ОС нет UTF. В PHP-то она всё равно будет, поэтому
LIME пишет:
а как тогда быть с модификатором u
что произойдет в системе без utf при указании этого модификатора?

- не может быть. Если бы представить, что сам интерпретатор не мог обработать UTF, то тогда бы и в HEX не было бы смысла.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LIME
Отправлено: 18 Июня, 2013 - 12:53:38
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




снова все запуталось но ладно
осядет - дойдет
 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Июня, 2013 - 13:12:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Lime пишет:
с модификатором u

Имеется:
Файл в utf-8.
Внутри следующий код:
PHP:
скопировать код в буфер обмена
  1. $str = "привет";
  2. var_dump(preg_match("/[а-я]/u", $str));

Результат:
Цитата:
~$ php test.php
int(1)


Перекодируем в windows-1251 c переводом строки \r\n.
Содержимое файла такое же.
Результат:
Цитата:
~$ php test.php
PHP Warning: preg_match(): Compilation failed: invalid UTF-8 string at offset 2 in /home/deep/test.php on line 3
bool(false)
 
 Top
LIME
Отправлено: 18 Июня, 2013 - 13:16:47
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




DeepVarvar ыгым
 
 Top
EuGen Администратор
Отправлено: 18 Июня, 2013 - 13:18:32
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




DeepVarvar
С примером хорошая идея. Ну, собственно, теперь проделать то же самое для hex-последовательностей и увидеть разницу.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LIME
Отправлено: 18 Июня, 2013 - 13:21:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




кажется уже не надо примера с hexом ))
значит имелось ввиду именно написание в другой кодировке??
я как-то не видел такой возможности действия))
 
 Top
EuGen Администратор
Отправлено: 18 Июня, 2013 - 13:24:10
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




LIME
Разумеется, речь только о сохранении и прочтении. А как Вы думали, что от того, что файл не в UTF, интерпретатор почему-то "разучится" работать с UTF?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB