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 :: Допустимые теги в строке
Покинул форум
Сообщений всего: 273
Дата рег-ции: Февр. 2012
Помог: 0 раз(а)
[+]
Скажите как, можно сделать такое, есть строка в ней допускаются только html теги <li>, <lu>, <a>? а если в строке найдены другие теги тогда вернуть false.
dXdYdZ
Отправлено: 28 Ноября, 2013 - 22:02:51
Посетитель
Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013
Помог: 11 раз(а)
Не знаю, насколько это правильно, но навскидку, первое, что пришло в голову -
Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013
Помог: 11 раз(а)
Ch_chov пишет:
dXdYdZ, а зачем strlen ?
Потому что проверить длину строки, наверное, быстрее, чем посимвольно сравнить 2 строки.
Ch_chov
Отправлено: 29 Ноября, 2013 - 12:59:52
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
dXdYdZ пишет:
Потому что проверить длину строки, наверное, быстрее, чем посимвольно сравнить 2 строки
Проверил. Абосолютно одинаково работает. Даже, на больших строках. А почему вы решили что PHP сравнивает строки посимвольно?
dXdYdZ
Отправлено: 29 Ноября, 2013 - 14:41:54
Посетитель
Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013
Помог: 11 раз(а)
Ch_chov пишет:
Проверил. Абосолютно одинаково работает. Даже, на больших строках. А почему вы решили что PHP сравнивает строки посимвольно?
Ну, потому что, если бы я писал сравнение строк на asm или на C++, то я сравнивал бы их в цикле именно посимвольно. А как ещё можно сравнить 2 строки? Мне вот стало интересно, может можно ещё как-то?
Второй вопрос, что, если PHP использует внутри интерпретатора строки, оканчивающиеся на нулевой байт (как принято в C), то для определения их длины всё равно придётся пробежаться циклом по этим строкам в поисках этого самого нулевого байта. Разница, в общем, лишь в том, что во втором случае не надо будет выполнять cmp со значениями из второй строки, а только с нулевым байтом, может быть будет чуточку быстрее.
Тут ещё может быть, что на процессорах с соответствующей архитектурой (а сейчас таких большинство) строки сравниваются векторными командами (работающими сразу с массивом данных) (как они точно называются, уже и не помню, давно я asm интересовался), но всё равно сравнить с 0 по-моему чуть проще, чем сравнить со значением из 2-го массива. Хотя, может я и ошибаюсь. Это надо написать на asm и посчитать количество тактов, требующихся на одну итерацию цикла в обоих случаях, тогда понятно будет.
armancho7777777
Отправлено: 29 Ноября, 2013 - 15:16:19
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
dXdYdZ пишет:
на C++, то я сравнивал бы их в цикле именно посимвольно
Почему не функцией strcmp ?
dXdYdZ
Отправлено: 29 Ноября, 2013 - 15:23:18
Посетитель
Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013
Помог: 11 раз(а)
armancho7777777 пишет:
Почему не функцией strcmp ?
А функция strcmp их в конечном итоге (откомпилированная в машинном коде) сравнивает не посимвольно разве? (Добавление)
По-моему процессор сравнивает строки посимвольно, как ни крути. (Добавление)
Или по 4 (32 разрядные) - 8(64) байт.
armancho7777777
Отправлено: 29 Ноября, 2013 - 15:35:26
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
dXdYdZ пишет:
сравнивает не посимвольно разве?
Я спрашиваю у Вас, а Вы у меня ?) (Добавление)
Ну а вообще да, логично.
DeepVarvar
Отправлено: 29 Ноября, 2013 - 19:27:12
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
dXdYdZ пишет:
посимвольно
Помоему для начала следует измерить длины строк, и если они не равны, значит и строки не равны. Тогда бежать посимвольно уже не нужно будет. Но это на сях. На пхп же лучше сразу сравнить и все.
Покинул форум
Сообщений всего: 1
Дата рег-ции: Май 2014
Помог: 0 раз(а)
dXdYdZ пишет:
Ну, потому что, если бы я писал сравнение строк на asm или на C++, то я сравнивал бы их в цикле именно посимвольно. А как ещё можно сравнить 2 строки?
...
А функция strcmp их в конечном итоге (откомпилированная в машинном коде) сравнивает не посимвольно разве?
Или по 4 (32 разрядные) - 8(64) байт.
Ещё во времена MS DOS были команды CMPS и SCAS для сравнения и поиска строк - это намного быстрее, чем писать цикл. А сейчас есть, напр., http://ru[dot]wikipedia[dot]org/wiki/SSE4 .
Более того, процессоры до того дошли, что умеют определять, нужны ли ассемблерной команде результаты предыдущей. И выполняют несколько последовательных команд одновременно, если они не зависят от результатов друг друга. Вот тут товарищ интересно и доступно про оптимизацию пишет http://www[dot]agner[dot]org/optimize/
И особо оптимизированные библиотечки там есть.
(А, теоретически, все современные компиляторы, интерпретаторы и стандартные библиотечки должны всем этим пользоваться...)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.