Проблем със bbcode и оцветяване на php код

TryMe каза:
kikity_94 каза:
Да но нещо не мога да разбера къде да ги ръгна тези unset-и :S

След $codeE = explode("<br />", $code);


PHP:
$codeE = explode("<br />", $code);

unset($codE[0]); #трием първият елемент
unset($codE[count($codE) - 1]); #трием последният елемент

А не мога да разбера този $count какво ти брои ?

$count ми е точно за броене на редовете, целта му е д азапочне да брои от 1 до края на цикъла. Също забелязваш и if условието което ако числата са от 0-9 да им пребавя по 1 нула от пред.

Но има и друго с тези в unseta първият проработи започна да брои от където трябва, 2рият също истрива броенето на [*/php], но пък и истрива последния ред от кода така, че отново остава един празен ред със число от брояча.

Дака сега ще разгледам и твойта тема :)

//EDIT: TryMe

Получих най- накрая желания резултат, просто от 2рият unset трябваше да се премахне -1 и сега работи както трябва.
TryMe ти получаваш точката тъй като ми помогна най-точно да разреша проблема и да го направя по начина по който аз искам. Благодаря :)

Дака на тебе също много ти благодаря за мненията и насоките които ми даде в цялата тема и ще имам в предвид всичко това което каза.
А ето крайният код

PHP:
		<?php   
			function highlightphp($code) {
				if(preg_match("/\[php\](.+?)\[\/php\]/is", $code)){
					$code = htmlspecialchars_decode($code);					
					$code = preg_replace("/\[php\](.+?)\[\/php\]/is", "$1", $code);
					$code = highlight_string($code, true);	
					$codeE = explode("<br />", $code);
					unset($codeE[0]);
					unset($codeE[count($codeE)]);
					$count = 1;
					foreach($codeE as $line => $code) {
						if($count < 10) {
							echo "0".$count.$code."<br />";
						} else {
							echo $count.$code."<br />";
						}
						$count++;
					}
				} else {
					$code = "<xmp>". $code ."</xmp>";
					echo $code;
				}			
			}
		
			if(isset($_POST['submit'])) {	
				highlightphp(htmlspecialchars($_POST['php']));
			}		
		?>
 
kikity_94 каза:
TryMe каза:
kikity_94 каза:
Да но нещо не мога да разбера къде да ги ръгна тези unset-и :S

След $codeE = explode("<br />", $code);


PHP:
$codeE = explode("<br />", $code);

unset($codE[0]); #трием първият елемент
unset($codE[count($codE) - 1]); #трием последният елемент

А не мога да разбера този $count какво ти брои ?

$count ми е точно за броене на редовете, целта му е д азапочне да брои от 1 до края на цикъла. Също забелязваш и if условието което ако числата са от 0-9 да им пребавя по 1 нула от пред.

Но има и друго с тези в unseta първият проработи започна да брои от където трябва, 2рият също истрива броенето на [*/php], но пък и истрива последния ред от кода така, че отново остава един празен ред със число от брояча.

Дака сега ще разгледам и твойта тема :)

Сложи unset-ите така:

PHP:
#ако не, опитай без -1, защото не знам 
#как ти се връща точно масива от explode
unset($codE[count($codE) - 1]);
unset($codE[0]);
 
Само да ти кажа че при мен се ползваше /n/r за броене на редовете заради оцветяването на кода ми не с php, а с Jquery :) Спокойно можеш да си ползваш <br /> затова ти написах и примерен код с викане на функция иии обработването само по части на текста в нея, понеже ще ти спести ред проверки и ще ти е по-добре и удобно стига да си го подкараш де :)

PHP:
function highlightphp($code) {
$bbcode = htmlspecialchars_decode($code[1]);
preg_match_all('/.+[\r\n]?/', $text, $match);
$bbcode= '<ol>';
 foreach($match[0] as $value) {
 $text.='<li>'.$value.'</li>';
 }
 $bbcode.='</ol>';

$bbcode = highlight_string('$bbcode', true);   
return $bbcode ;                   
}   
if(isSet($_POST['tex']))
{
$bbcode=  htmlspecialchars($_POST['tex']);
$bbcode= preg_replace_callback("/\[php\](.+?)\[\/php\]/is","highlightphp",$bbcode);
echo '$bbcode';
}

Нещо подобно не съм го пробвал. :)
 
unset($codeE[count($codeE)]);

и аз си помислих, че ще е така, защото unset не ресетва ключовете на масива. Както и да е, щом си се оправил, добре ;)
 
Забравил съм да добавя че на входа трябва и addslashes или mysql_real_escape_string да поставиш за филтриране на SQL инжекции, още на входа така си гарантираш много по сигорна информация, но имам въпрос ако на такъв текст се постави и trim на входа дали няма да се получат гафове с таблуацеята на текста ? Питам за да не отварям друга тема :D Или ще махне празните места само в началото и края на текста, а тези между думите ще си стоят вътре ?
 

Back
Горе