Работа функции в зависимости от кодировки

craz

Нестандартное звание
PHP:
function KillTags($str)
	{
		while(($p1 = strpos($str, "<?"))!==false)
		{
			$p = $p1 + 2;

			$php_doubleq = false;
			$php_singleq = false;
			$php_comment = false;
			$php_star_comment = false;
			$php_line_comment = false;

			while($p < strlen($str))
			{
				if(substr($str, $p, 2)=="?>" && !$php_doubleq && !$php_singleq && !$php_star_comment)
				{
					$p+=2;
					break;
				}
				elseif(!$php_comment && substr($str, $p, 2)=="//" && !$php_doubleq && !$php_singleq)
				{
					$php_comment = $php_line_comment = true;
					$p++;
				}
				elseif($php_line_comment && (substr($str, $p, 1)=="\n" || substr($str, $p, 1)=="\r"))
				{
					$php_comment = $php_line_comment = false;
				}
				elseif(!$php_comment && substr($str, $p, 2)=="/*" && !$php_doubleq && !$php_singleq)
				{
					$php_comment = $php_star_comment = true;
					$p++;
				}
				elseif($php_star_comment && substr($str, $p, 2)==' \*\/ ')
				{
					$php_comment = $php_star_comment = false;
					$p++;
				}
				elseif(!$php_comment)
				{
					if(($php_doubleq || $php_singleq) && substr($str, $p, 2)=="\\\\")
					{
						$p++;
					}
					elseif(!$php_doubleq && substr($str, $p, 1)=='"')
					{
						$php_doubleq=true;
					}
					elseif($php_doubleq && substr($str, $p, 1)=='"' && substr($str, $p-1, 1)!='\\')
					{
						$php_doubleq=false;
					}
					elseif(!$php_doubleq)
					{
						if(!$php_singleq && substr($str, $p, 1)=="'")
						{
							$php_singleq=true;
						}
						elseif($php_singleq && substr($str, $p, 1)=="'" && substr($str, $p-1, 1)!='\\')
						{
							$php_singleq=false;
						}
					}
				}
				$p++;
			}
			$str = substr($str, 0, $p1).substr($str, $p);
		}

		$search = array (
			"'<script[^>]*?>.*?</script>'si",  // Strip out javascript
			"'<style[^>]*?>.*?</style>'si",  // Strip out styles
			"'<select[^>]*?>.*?</select>'si",  // Strip out <select></select>
			"'<head[^>]*?>.*?</head>'si",  // Strip out <head></head>
			"'<tr[^>]*?>'",
			"'<[^>]*?>'",
			"'([\\r\\n])[\\s]+'",  // Strip out white space
			"'&(quot|#34);'i",  // Replace html entities
			"'&(amp|#38);'i",
			"'&(lt|#60);'i",
			"'&(gt|#62);'i",
			"'&(nbsp|#160);'i",
			"'[ ]+ '",
		);

		$replace = array (
			"",
			"",
			"",
			"",
			"\r\n",
			"\r\n",
			"\\1",
			"\"",
			"&",
			"<",
			">",
			" ",
			" ",
		);

		$str = preg_replace ($search, $replace, $str);

		return $str;
	}
Есть такой бредо код - и есть бредо мнение что он utf-8 данные чистит дольше чем cp-1251

А как думаешь ты %username%)))
 

zerkms

TDD infected
Команда форума
craz
Я думаю, что совершенно по барабану сколько времени это занимает.
 

craz

Нестандартное звание
нет не стоит - это каталог продуктов он вычищается от тегов.

Меня интересует не логика приложения - я бы спросил по-другому к примеру: "а нужна ли ваще эта функция при загрузке данных заведомо не содержащих теги пхп"

Меня интересовало данный код при условии что данные будут utf-8, а не в cp-1251, разве будет выполняться дольше - и чем это обсуловленно с вашей точки зрения?
 

Single

пилот капсулы
А как думаешь ты %username%)))
Стоит самостоятельно замерить время работы скрипта.
Покрутить функции с/без префикса "mb_" мод u.
По результатам замеров задуматься над вопросом стоит ли вообще заниматься оптимизацией.
 

craz

Нестандартное звание
я спросил тут потому что сам уже проверял часть xml файла проверяемого функцией и не увидел узких мест.
Возможно вы то как раз и посоветуете какие нативные функции заменить, или как-то переписать возможно, или просто поддержите мое мнение - что это не правда и разницы во времени не может быть(при таком стрипе) в зависимости от кодировки.
 

craz

Нестандартное звание
Стоит самостоятельно замерить время работы скрипта.
Покрутить функции с/без префикса "mb_" мод u.
По результатам замеров задуматься над вопросом стоит ли вообще заниматься оптимизацией.
но я вас услышал я проверю mb функции спасибо хоть за какой то вектор.
 

craz

Нестандартное звание
Не ну я ушел пробовать, но проблема то не решена - вопрос был играет ли роль кодировка данных обрабатываемых данной функцией на производительность.
 

craz

Нестандартное звание
нет. Я проверил - я для себя не авторитетен.) Жизненная позиция такая - мне сказали данная функция долго работает с utf-8, я проверил время обработки одной очистки одной позиции из 4000 всего 0.02 секунды то есть всего две минуты по максимуму. Так что я 1) подверг сомнению мнение другого человека, 2) проверил 3) мне стало не достаточно его мнения и моего, мне бы хотелось услышать третье обоснованное мнение - это называется метод индуктивного доказательства, насколько вы знаете.

При этом в данный момент я проверяю на mb_*

А так же мне кажется что какой-то набор входных данных не важно в какой кодировки, может сильно зациклить функцию, только вот как понять что за набор.
 

Single

пилот капсулы
мне сказали данная функция долго работает с utf-8
На чем был основан сей вывод?

я проверил время обработки одной очистки одной позиции из 4000 всего 0.02 секунды то есть всего две минуты по максимуму.
Конкретно для тебя 0.02 секунды это много или нормально?

А так же мне кажется что какой-то набор входных данных не важно в какой кодировки, может сильно зациклить функцию, только вот как понять что за набор.
мне вот тоже бывает много чего кажется, но логирование процессов на выявление не предусмотренных исключений решает вопрос на корню.

я для себя не авторитетен
Мое мнение - все круто!
 

craz

Нестандартное звание
На чем был основан сей вывод?
да вот я и пытаюсь выяснить, я хочу выяснить что это не изза этого и сказать "хаха вы идиоты вон из професии")))) ну или выяснить что изза этого - и плюнуть пускай хоть весь день выгружается

Конкретно для тебя 0.02 секунды это много или нормально?
Для меня нормально, но полная выгрузка занимает около часа, при этом рушиться именно на этой функции с возгласами об ексикушин тайм в 60 секунд - не ну я поставил час, но по мне так это не правильно.


мне вот тоже бывает много чего кажется, но логирование процессов на выявление не предусмотренных исключений решает вопрос на корню.
что логировать?

Мое мнение - все круто!
что круто? что???? замучали вы оптимисты, блин все хреново!!! все!111 денег нет на яхту живем в холоде и грязи большую часть года!!! все хреновааааааааа!!!

P.s. шутка конечно)
 

craz

Нестандартное звание
короче все я выяснил в битриксе еще и поддержка врунишки одни
 

cDLEON

Онанист РНРСlub
ну, во-первых, битрикс хаять тебе уж точно не нужно ) Судя по коду, ты от них далеко не ушёл =)
А во-вторых, что в УТФ, что в cp1251 символы латиницы имеют одно и то же однобайтовое представление. Поэтому проблема уж точно не в этом.
 

vovanium

Новичок
хм, ну а что мешает, добавить переменную в код которая посчитает сколько времени выполняется конкретно эта функция, и сравнить для cp1251 и utf-8, если разница будет существенной, тогда посмотреть какой из блоков функции тупит.
хотя вполне логично что utf-8 будет работать медленнее, так как чисто физически там больше байт для той же длины строки, хоть это и не значит что разница существенна, но всякое может, например, замечено что php медленнее работает со строками больше 64 КБ.
 

craz

Нестандартное звание
ну что мешает - ничего не мешает
для того чтобы "облогировать" данную функцию понадобиться всего лишь это написать - все это написать вприципе ничего кроме времени не мешает, только как бы мне мой работадатель заплатил за "настройку" все этой мутатени + купил у битрикса поддержку и код - не считаю что этого не достачно для того чтобы работало из коробки + не считаю что мне нужно врать про кодировки и всяку пежню говорить от балды.

Буду писать если 1) никто не сталкивался с подобной функцией, 2) если смотря на нее вы не видите проблем в кодировках - надо написать и проверить, что кодировка тут не причем. Не понимаю такую техподдержку не понимаю за что ваще такие деньги беруться и не понимаю что делать со своей правдой?
 
Сверху