Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
Архивирую строку с текстом в РНР. Вроде ничего сложного, функции архивации в РНР есть. А что будет если в сжатой строке появится символ Chr(0)? Помнится у других языков программирования на этом строка считается завершонной. А как обстоит делов с РНР? (может я зря волнуюсь? может он дружит с этим символом и для него нет проблем?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 16:54 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
проверка этого вопроса заняла бы меньше чем написание текста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 17:02 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrowпроверка этого вопроса заняла бы меньше чем написание текста.Проверка не дала бы ответа о безопасности наличия символа #0. Его наличие в строке может быть частным случаем... Скажем в Delphi объявляешь строковую переменную в обработчике, и она 100 раз подрат будет пустой, а потом бах и окажется заполненной всякой всячиной. Тоже частный случай... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 19:22 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
InterSkyА что будет если в сжатой строке появится символ Chr(0)? сжатая строка будет обрезана по этот символ. А с чего бы вдруг ему там появлятся ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 14:46 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
artasА с чего бы вдруг ему там появлятся ? Ну я же не могу гарантировать что в сжатой последовательности (которая по сути является бинарным кодом) не встретится символ Chr(0). Тысячу раз фаил заархивировал и у тебя всё нормально, а в тысячапервом бах и появится нулевой символ и строка обрежется и уже не сможет быть разархивированной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 18:49 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
artasInterSkyА что будет если в сжатой строке появится символ Chr(0)? сжатая строка будет обрезана по этот символ. А с чего бы вдруг ему там появлятся ? Вообще-то в php не будет :) Не знаю с чего такой вывод, но попробуйте выполнить: Код: php 1. 2. и сами убедитесь. InterSkyПроверка не дала бы ответа о безопасности наличия символа #0. Его наличие в строке может быть частным случаем... Скажем в Delphi объявляешь строковую переменную в обработчике, и она 100 раз подрат будет пустой, а потом бах и окажется заполненной всякой всячиной. Тоже частный случай... В программировании не бывает частных случаев :). Один и тот же код не будет отрабатывать по-разному при тех же условиях. В Дэлфи так происходит потому, что ячейки памяти, выделяемые под локальные переменные не обнуляются (а зачем, если например я создам массив, и решу его сразу записать значениями). Потому там нету никаких "частных случаев", а просто правило - перед чтением переменной её надо записать. В данном случае подобные нюансы отсутствуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 20:19 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
Я по этому и спрашиваю у тех кто знает... А то кто его знает, один раз увидел Chr(0), а потом какой-нибудь Flush пройдёт и подожмёт строки до первых нулей... В конце концов в РНР много сюрпризов, например: Код: php 1. Данный код вернёт True. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 04:08 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
InterSkyЯ по этому и спрашиваю у тех кто знает... А то кто его знает, один раз увидел Chr(0), а потом какой-нибудь Flush пройдёт и подожмёт строки до первых нулей... В конце концов в РНР много сюрпризов, например: Код: php 1. Данный код вернёт True. Это не сюрприз (после перехода с delphi у меня тоже были проблемы с нестрогим сравнением и с процедурой приведения типов, но просто надо было разобраться). в отличие от строгого сравнения (===) при нестрогом сравнении типы переменных приводятся к одному и только тогда сравниваются. Это делается всегда по правилу, более сложный тип приводится к более простому (если так можно выразится). Потому при сравнении двух переменных разного типа, int приводится к boolean, float к int или boolean, string к float или int или boolean и т.д. Потому то, попробуйте привести "txt" к типу int... что у Вас получится? )) дааа... 0... а теперь сравниваем if(0==0)... что получаем? правильно - true :) А вот если вместо "txt" написать "1txt", то уже получим false (так как "1txt" после приведения к типу int будет равно 1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 11:59 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
А ещё javascript есть, в нём всё наоборот (или в php всё наоборот) и alert(0=='txt') вернёт false. Также как и две разные строки - ("37127371298379127398733" == "37127371298379127398734") в php это true, а в js false. Это web, здесь всё серьёзно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 12:33 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
st_stА ещё javascript есть, в нём всё наоборот (или в php всё наоборот) и alert(0=='txt') вернёт false. Также как и две разные строки - ("37127371298379127398733" == "37127371298379127398734") в php это true, а в js false. Это web, здесь всё серьёзно Ага... а вот "37127371298379127398733b" == "37127371298379127398734b" уже вернёт false. Видимо php по умолчанию все строки вида /^\d+$/ старается сравнивать как integer, а строки /\d+.\d+/ как float. (соответственно в первом случае всё, что больше максимума для integer будет приравниваться к этому максимуму, а во втором просто точность в 14 знаков, а остальное отбрасывается) ))) Кстати, об этом не знал... спасибо :) буду внимательнее следить за строками, если в них есть только цифры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 14:08 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
тред нечетателей документации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 14:32 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrowтред нечетателей документации. Киньте пожалуйста ссылку на доки, где данное поведение обосновывается (или хотя бы упоминается). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 15:06 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
http://www.php.net/manual/en/language.operators.comparison.php авторIf you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically. These rules also apply to the switch statement. The type conversion does not take place when the comparison is === or !== as this involves comparing the type as well as the value. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 15:12 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrow http://www.php.net/manual/en/language.operators.comparison.php авторIf you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically. These rules also apply to the switch statement. The type conversion does not take place when the comparison is === or !== as this involves comparing the type as well as the value. хм) правда есть. спасибо. Не понятна мне конечно причина такого поведения, но ладно... разрабам виднее )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 15:36 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
авторНе понятна мне конечно причина такого поведения, но ладно эм? если просто то потому что у нас есть язык с нестрогой типизацией ВЕЗДЕ. если сложно - то http://lxr.php.net/xref/PHP_5_4/Zend/zend_operators.c#1402 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 15:45 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторНе понятна мне конечно причина такого поведения, но ладно эм? если просто то потому что у нас есть язык с нестрогой типизацией ВЕЗДЕ. если сложно - то http://lxr.php.net/xref/PHP_5_4/Zend/zend_operators.c#1402 При сравнении двух значений, определяется тип двух переменных и если обе имеют тип string, то отправляется в функцию, которая сначала преобразовывает обе строки в числа (если это возможно) и потом, если произошло переполнение, то идёт переход по ссылке string_cmp (не знаю, может это что стандартное, но я не нашёл данной ссылки в указанном файле), иначе выполняется сравнение двух числовых значений полученных от преобразований. Непонятно 2 момента (я так понимаю Вы в теме, может сможете объяснить, а то я совсем не въезжаю): 1. почему проверка на переполнение не сработала (там я вижу ещё уйма условий проверяется, может в них дело... не влазил в самую глубину)? 2. а вообще, нафиг это надо (когда сверяем 2 строки). Если например предполагается, что мы хотим сравнить числа записанные в строках, то достаточно проверить обе строки по регулярке /^\d+(\.\d+)?$/ и если есть совпадение у обеих строк, то просто добираем строки нулями так, что бы до точки и после неё количество символов было одинаковым. После чего проводим как и обычно посимвольную сверку строк :) Разве так не легче и не более правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 17:00 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
товарищь лейтенант - подумайте (С). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 17:32 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrow, Думал перед тем, как написать, после этого. После Вашего ответа тоже думал... да вот не придумывается. В методе разработчиков есть какая-то сверхумная хитрость? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 18:06 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
ПрограмёрВ методе разработчиков есть какая-то сверхумная хитрость? Эта хитрость внедрена по просьбе АНБ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 19:04 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
InterSkyПрограмёрВ методе разработчиков есть какая-то сверхумная хитрость? Эта хитрость внедрена по просьбе АНБ :) То есть рассказать никто не сможет? И через сколько предполагается рассекретить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 20:09 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
проверять регуляркой ВСЕ строки в слабо типизированном языке - медленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 23:27 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
нафик - это надо. потому что через эту функцию работает половина php. это его принцип и фундамент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 23:28 |
|
||
|
Символ #0 в строках PHP
|
|||
|---|---|---|---|
|
#18+
ScareCrowпроверять регуляркой ВСЕ строки в слабо типизированном языке - медленно. Вообще, в стандартном случае это не дольше, чем переводить строку в число :) Но учитывая особенность ПХП, где переменная хранится сразу во всех возможных типах (насколько я помню), согласен, будут затраты времени на лишние проверки. Ну что ж, надо привыкнуть строки сравнивать операцией строгого сравнения :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 02:08 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38537389&tid=1463108]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
128ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 455ms |

| 0 / 0 |
