Забыли пароль?
Запросите новый здесь.

Автор темы: IPB_Support
ID темы: 2573
Информация:
Тема содержит 14 сообщения, была просмотрена 12119 раз.
Просмотр темы
PHP-Fusion Russia » Веб-разработка » PHP
 Распечатать тему
Вопрос по использованию htmlspecialchars()
IPB_Support
Есть движок, скачем так это червоточина в прямом его смысле.
Во всем коде присутствует ENT_QUOTES, например:
Загрузить источник  GeSHi: PHP
  1. $h = htmlspecialchars($_GET['h'], ENT_QUOTES, '');
Добавлено за 0.033 секунд, используя GeSHi 1.0.8.10

Вопрос, можно ли как нибудь заменить этот ENT_QUOTES, уж очень он меня бесит, и я не понимаю как он работает.
Если же , нет альтернативы, то мне предложили вот такой вариант:
Загрузить источник  GeSHi: PHP
  1. my_htmlspecialchars($string)
  2. {
  3. return htmlspecialchars($string, ENT_QUOTES, '');
  4. }
Добавлено за 0.017 секунд, используя GeSHi 1.0.8.10

и везде где присутствует ENT_QUOTES , писать вместо той строки вот это:
Загрузить источник  GeSHi: PHP
  1. $h = my_htmlspecialchars($_GET['h']);
Добавлено за 0.017 секунд, используя GeSHi 1.0.8.10

Повторюсь, если же нет иной(лучшей альтернативы), то правилен ли вариант который мне предложили? или же могут возникнуть проблемы?
Изменил(а) FILON, 18.10.2015 20:10
 
Rush
если тебя бесит синтаксис языка - может стоит сменить язык? или у тебя осенняя депрессия?
 
Web
IPB_Support
Rush написал:

если тебя бесит синтаксис языка - может стоит сменить язык? или у тебя осенняя депрессия?

да не, не депрессия, просто впервые столкнулся с этим. И думал, что это давным давно не кто не использует.
 
SchreiBear
IPB_Support, можно на регулярке того же добиться.. указываются параметры фильтрации
Нужно сказать огромное спасибо людям, которые живут на популярных девелопер форумах и дают там адекватные ответы на абсолютно «нубские» вопросы без попыток унизить вопрошающего.
 
Truth_Explorer
о каком движке идет речь и чем не устраивает синтаксис? Как правильно было замечено - регулярки в помощь.
 
Vova
IPB_Support написал:

Есть движок, скачем так это червоточина в прямом его смысле.
Во всем коде присутствует ENT_QUOTES, например:
Загрузить источник  GeSHi: PHP
  1. $h = htmlspecialchars($_GET['h'], ENT_QUOTES, '');
Добавлено за 0.022 секунд, используя GeSHi 1.0.8.10

Вопрос, можно ли как нибудь заменить этот ENT_QUOTES, уж очень он меня бесит, и я не понимаю как он работает.
Если же , нет альтернативы, то мне предложили вот такой вариант:
Загрузить источник  GeSHi: PHP
  1. my_htmlspecialchars($string)
  2. {
  3. return htmlspecialchars($string, ENT_QUOTES, '');
  4. }
Добавлено за 0.020 секунд, используя GeSHi 1.0.8.10

и везде где присутствует ENT_QUOTES , писать вместо той строки вот это:
Загрузить источник  GeSHi: PHP
  1. $h = my_htmlspecialchars($_GET['h']);
Добавлено за 0.023 секунд, используя GeSHi 1.0.8.10

Повторюсь, если же нет иной(лучшей альтернативы), то правилен ли вариант который мне предложили? или же могут возникнуть проблемы?


Преобразует:
' = '
< = &lt;
> = &gt;

В PHP-Fusion эту роль делает эта функция:

Загрузить источник  GeSHi: PHP
  1. function stripinput($text) {
  2. if (!is_array($text)) {
  3. $text = stripslash(trim($text));
  4. $search = array("\"", "'", "\\", '\"', "\'", "<", ">", "&nbsp;");
  5. $replace = array("&quot;", "&#39;", "&#92;", "&quot;", "&#39;", "&lt;", "&gt;", " ");
  6. $text = preg_replace("/(&amp;)+(?=\#([0-9]{2,3});)/i", "&", str_replace($search, $replace, $text));
  7. } else {
  8. foreach ($text as $key => $value) {
  9. $text[$key] = stripinput($value);
  10. }
  11. }
  12. return $text;
  13. }
Добавлено за 0.026 секунд, используя GeSHi 1.0.8.10

 
Web
SchreiBear
Опять же целисобразность замены не дает покоя... будет ли замена быстрее работать..bn
Нужно сказать огромное спасибо людям, которые живут на популярных девелопер форумах и дают там адекватные ответы на абсолютно «нубские» вопросы без попыток унизить вопрошающего.
 
Vova
SchreiBear написал:

Опять же целисобразность замены не дает покоя... будет ли замена быстрее работать..bn

Будет.
x1
 
Web
Truth_Explorer
Не будет. На быстродействие обработки кода не влияет, нет запросов к БД. Это всего лишь вариант синтаксиса.
Изменил(а) Truth_Explorer, 18.10.2015 17:13
x1
 
FILON
Извините, но что вы несете? Любая функция, даже присвоения, требует определенного процессорного времени.

К слову, если Вы гонитесь за производительностью, то PHP далеко не лучший вариант для создания высоконагруженных приложений. Но выбирать наиболее быстрые решения – дело отнюдь неплохое.

К вопросу по теме: есть так называемые тесты производительности (англ. benchmark), которые выявляют скорость работы функции на одних и тех же данных. Дабы не быть голословным, провел тесты двух функций, обсуждаемых в теме.

Результаты:

Скачать исходники  Код
my_htmlspecialchars()            stripinput()

               10 000 повторений
95.904 мс                         303.277 мс

               100 000 повторений
955.014 мс                        3154.611 мс




А дальше выбирайте сами. Дело за Вами.
What's common between Halloween and Christmas? Every programmer knows: 31 oct = 25 dec.
 
Vova
FILON написал:

Извините, но что вы несете? Любая функция, даже присвоения, требует определенного процессорного времени.

К слову, если Вы гонитесь за производительностью, то PHP далеко не лучший вариант для создания высоконагруженных приложений. Но выбирать наиболее быстрые решения – дело отнюдь неплохое.

К вопросу по теме: есть так называемые тесты производительности (англ. benchmark), которые выявляют скорость работы функции на одних и тех же данных. Дабы не быть голословным, провел тесты двух функций, обсуждаемых в теме.

Результаты:

Скачать исходники  Код
my_htmlspecialchars()            stripinput()

               10 000 повторений
95.904 мс                         303.277 мс

               100 000 повторений
955.014 мс                        3154.611 мс




А дальше выбирайте сами. Дело за Вами.

Кинь код, у себя запущу на самом слабом сервере.
Изменил(а) Vova, 18.10.2015 21:27
 
Web
FILON
Кода уже нет. Осталась только логика, разработанная "на коленке": в цикле вызываем функцию от одного и того же аргумента. Засекаем время выполнения цикла в целом (погрешность времени, уходящего на инкрементирование счетчика игнорируем, так как оно сравнительно мало относительно времени выполнения функции). Операцию повторяем несколько раз и усредняем полученные результаты, посчитав мат. ожидание. На выходе получаем среднее относительное время работы функции.

Либо используем готовый тест производительности.
What's common between Halloween and Christmas? Every programmer knows: 31 oct = 25 dec.
 
Vova
FILON написал:

Кода уже нет. Осталась только логика, разработанная "на коленке": в цикле вызываем функцию от одного и того же аргумента. Засекаем время выполнения цикла в целом (погрешность времени, уходящего на инкрементирование счетчика игнорируем, так как оно сравнительно мало относительно времени выполнения функции). Операцию повторяем несколько раз и усредняем полученные результаты, посчитав мат. ожидание. На выходе получаем среднее относительное время работы функции.

Либо используем готовый тест производительности.


Напиши строку на какой ты проводил тест.
 
Web
Pisatel
В 9 stripinput() выглядит теперь так
Загрузить источник  GeSHi: PHP
  1. function stripinput($text) {
  2. if (!is_array($text)) {
  3. return str_replace('\\', '&#092;', htmlspecialchars(stripslash(trim($text)), ENT_QUOTES));
  4. }
  5. foreach ($text as $i => $item) {
  6. $text[$i] = stripinput($item);
  7. }
  8. return $text;
  9. }
Добавлено за 0.024 секунд, используя GeSHi 1.0.8.10

Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум: