download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Заместване в текст в даден диапазон

Автор
Съобщение
insecteater
Съб, 14.08.10, 11:50
Ето какво ми дойде до главата - имам код, подобен на следния:
<samp class="console">
E:Documents and SettingsGancho>dir d:
14.08.2010 г.  10:16    <DIR>          .
14.08.2010 г.  10:16    <DIR>          ..
E:Documents and SettingsGancho>
</samp>
 
<h1>Аргументи</h1>
 
<samp class="console">dir ..
 Volume in drive E has no label.
 Volume Serial Number is 0CD8-CBEA
 
 Directory of E:Documents and Settings
 
28.11.2009 г.  21:29    <DIR>          .
28.11.2009 г.  21:29    <DIR>          ..
20.07.2010 г.  10:18    <DIR>          Admin
17.03.2010 г.  15:07    <DIR>          All Users
14.08.2010 г.  11:36    <DIR>          Gancho
26.07.2009 г.  16:17    <DIR>          Guest
28.11.2009 г.  21:29    <DIR>          Tony
               0 File(s)              0 bytes
               7 Dir(s)   7 709 143 040 bytes free
</samp>
<span style="background-color: yellow">Следва продължение ...</span>

Този код ако се визуализира директно в HTML страница разбираемо няма да свърши работа. Чудя се как мога чрез PHP да направя така, че това което е САМО между таговете samp да бъде преработено - например да му се приложи функцията htmlspecialchars или някаква друга custom функция, а всичко което е ИЗВЪН тези тагове, да остане недокоснато. Съдържанието между тези тагове може да бъде най различно. Както и извън него.
Не мога да бъда сигурен в структурата на текста, затова варианта да обработвам DOM дърво отпада. Чудя се дали има някакъв тарикатски регулярен израз или начин. Главната идея е, че има едно текстово поле, в което се пише html код, но точно за този таг за (много) по-голямо удобство php-то автоматично да си добавя специалните символи вътре в него.Обмислял съм и варианта с JavaScript към момента на въвеждането, но не мога да бъда сигурен пък в потребителя който ще въвежда текст (ужас - да нямаш вяра сам на себе си), а и четимостта на текста ще спадне.

Редакция: Обмислям дали да не си улесня живота просто като ползвам тага PRE, ама ако из съдържанието има затварящи pre-та и се прецакват нещата. А и ми се изгубва семантиката така.

редактиран от insecteater на 14.08.10 12:29
insecteater
Съб, 14.08.10, 12:49
 
function raw_for_preview($value) {
	while (true) {	
		if (preg_match("#<samp class=\"console\">(.*?)</samp>#ms", $value, $f)) {
			$f = raw_for_textarea($f[1]);
			$value = preg_replace("#<samp class=\"console\">.*?</samp>#ms", "<samp class=\"ready_console\">$f</samp>", $value, 1); 
		} else break;
	}
	$value = str_replace("class=\"ready_console\"", "class=\"console\"", $value);
	$value = preg_replace("/r?n/", "<br />rn", $value);
	$value = preg_replace("/  /", "  ", $value);
	return $value;
}

Оправих се. Засега стъкнах това ... не е първа хубост, има вероятност да се преработва, но главната цел е постигната.

phrozencrew
Пон, 16.08.10, 22:10
Мисля, че можеш да добавиш и:
$value = preg_replace("/</", "& lt;", $value);
$value = preg_replace("/>/", "& gt;", $value);

(без шпациите след & )

А иначе, като един лаик, бих попитал, за какво се използва while(true)? Много пъти съм го срещал, дори съм го преписвал, но нещо не го разбирам. Ще съм ти благодарен, ако ми го обясниш!

insecteater
Пон, 16.08.10, 22:34
Ми то не е кой знае какво. Използва се за циклене (ама не на паркет). Да си цикли, цикли цикли, докато не му натресеш break, както се вижда от кода няколко реда по-надолу.

Аз поне съм го ползвал няколко пъти - преди години бях правил някакъв сървър на php за чат (ей така за пробата), и там не трябваше да спира. Малко по-скоро пък, пак на php бях правил една програма, която трябваше да работи като service под windows (болни мозъци всякакви нали).

Та точно с while (true) си правя цикъла, който се върти постоянно, докато нещо необичайно не го прекъсне.
Дали ще е сървър, който постоянно да слуша и от време на време да може да прави и други неща, дали ще е service работещ на заден фон или както в случая - функция, която да претърсва нещо, докато се изчерпи това което си заслужава да се намери - while (true) си е толкова просто и логично, че те засърбяват пръстите да зациклиш на тая тема

Редакция: Ти - лаик ... все едно да наречеш Митник - воайор на дребно !!!!!!!

редактиран от insecteater на 16.08.10 22:40
insecteater
Пон, 16.08.10, 22:49

RE: Заместване в текст в даден диапазон

” Мисля, че можеш да добавиш и:
$value = preg_replace("/</", "& lt;", $value);
$value = preg_replace("/>/", "& gt;", $value);

(без шпациите след & ) „

 .....
то целия маймунджилък беше, за да приложа следната функция, която бива извиквана само за определен отрязък:
function raw_for_textarea($value) {
	$value = str_replace("&", "&", $value);
	$value = str_replace("<", "<", $value);
	$value = str_replace(">", ">", $value);
	$value = str_replace('"', "& #34", $value);
	$value = str_replace("'", "& #39", $value);
	return $value;
}

То си е част от по-голям проект. Ще го покажа тука по някое време да си дадете мнението. Но няма да е близките дни, че имам много работа по него.

редактиран от insecteater на 16.08.10 22:52
phrozencrew
Пон, 16.08.10, 23:35

RE: Заместване в текст в даден диапазон

” Ми то не е кой знае какво. Използва се за циклене (ама не на паркет). Да си цикли, цикли цикли, докато не му натресеш break, както се вижда от кода няколко реда по-надолу.

Аз поне съм го ползвал няколко пъти - преди години бях правил някакъв сървър на php за чат (ей така за пробата), и там не трябваше да спира. Малко по-скоро пък, пак на php бях правил една програма, която трябваше да работи като service под windows (болни мозъци всякакви нали).

Та точно с while (true) си правя цикъла, който се върти постоянно, докато нещо необичайно не го прекъсне.
Дали ще е сървър, който постоянно да слуша и от време на време да може да прави и други неща, дали ще е service работещ на заден фон или както в случая - функция, която да претърсва нещо, докато се изчерпи това което си заслужава да се намери - while (true) си е толкова просто и логично, че те засърбяват пръстите да зациклиш на тая тема

Редакция: Ти - лаик ... все едно да наречеш Митник - воайор на дребно !!!!!!! „

Много просто, ясно и разбираемо! Мерси, пичага!

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.