Autor Zpráva
wasil
Profil *
Hi,
format mezi znackami sem vyresil, ale potrebuju udelat aby se nahradily znacky "<" za "&lt;" a ">" za "&gt;" ale vypisou se pouze jeden znak.

<?

$dat = "[kod]<html><head></head></html>...halo halo ><[/kod]asdasdasdasdasdasdas";
$vzor1 = "[kod]";
$vzor2 = "[/kod]";
$vzor1_length = strlen($vzorek1);
$start = 0;
function zacatek ($data,$vzorek1,$zacatek)
{
for($i=$zacatek;$i<strlen($data);$i++):
for($j=0;$j<strlen($vzorek1);$j++):
if($data[$i+$j]==$vzorek1[$j]){
//echo ("ok i=".$i."&nbsp;j=".$j."<br /> ");
if($j==strlen($vzorek1)-1) return $i+$j+1;
} else $j=strlen($vzorek1);
endfor;
endfor;
return -1;
}
function konec ($data,$vzorek1,$zacatek)
{
for($i=$zacatek;$i<strlen($data);$i++):
for($j=0;$j<strlen($vzorek1);$j++):
if($data[$i+$j]==$vzorek1[$j]){
//echo ("ok i=".$i."&nbsp;j=".$j."<br /> ");
if($j==strlen($vzorek1)-1) return $i;
} else $j=strlen($vzorek1);
endfor;
endfor;
return -1;
}
function zamena($data,$zacatek,$konec)
{
for($i=$zacatek;$i<$konec;$i++):
if($data[$i]=="<") $data[$i]="&lt;";
elseif($data[$i]==">") $data[$i]="&gt;";
endfor;
return $data;
}
while($start < strlen($dat))
{
$zac = zacatek($dat,$vzor1,$start);
$end = konec($dat,$vzor2,$start);
if($zac != -1)
{
$dat = zamena($dat,$zac,$end);
$start=$end+strlen($vzor2);
}
else
{
break;
}
}
echo ($dat);
?>

radky ktere meni znacky jsou ve funkci "zamena"...
konkrétní řádky jsou tyto:

    if($data[$i]=="<") $data[$i]="&lt;";

elseif($data[$i]==">") $data[$i]="&gt;";
krteczek
Profil
použij funkci htmlspecialchars()
wasil
Profil *
hehe díky, ale já mám problém že on mi u fce htmlspecialchars() vypise jen jedno pismeno :D
krteczek
Profil
musis ji pposlat cely text ktery chceš ošetřit nebo ji nejprve pošli všechen text a teprve po pruchodu funkci nahrazuj [] značky
1) kde bereš $vzorek1?
n) nepřidáváš ale nahrazuješ před rovnáse dej tečku: .=
wasil
Profil *
diky zkusim taky ale vyresil sem to takhle :)

<?

$dat = "[kod]<html><head></head></html>...halo halo ><[/kod]asda[kod]<div>sdas</div>[/kod]dasd<b>sdas</b>das";
$vzor1 = "[kod]";
$vzor2 = "[/kod]";
$start = 0;
function zacatek ($data,$vzorek1,$zacatek)
{
for($i=$zacatek;$i<strlen($data);$i++):
for($j=0;$j<strlen($vzorek1);$j++):
if($data[$i+$j]==$vzorek1[$j]){
//echo ("ok i=".$i."&nbsp;j=".$j."<br /> ");
if($j==strlen($vzorek1)-1) return $i+$j+1;
} else $j=strlen($vzorek1);
endfor;
endfor;
return -1;
}
function konec ($data,$vzorek1,$zacatek)
{
for($i=$zacatek;$i<strlen($data);$i++):
for($j=0;$j<strlen($vzorek1);$j++):
if($data[$i+$j]==$vzorek1[$j]){
//echo ("ok i=".$i."&nbsp;j=".$j."<br /> ");
if($j==strlen($vzorek1)-1) return $i;
} else $j=strlen($vzorek1);
endfor;
endfor;
return -1;
}
function zamena($data,$zacatek,$konec)
{
$x="";
$i=0;
for($i;$i<$zacatek;$i++):
$x = $x.$data[$i];
endfor;
for($i=$zacatek;$i<$konec;$i++):
if($data[$i]==">") $x=$x."&gt;";
elseif($data[$i]=="<") $x=$x."&lt;";
else $x = $x.$data[$i];
endfor;
for($i;$i<strlen($data);$i++):
$x = $x.$data[$i];
endfor;
return $x;
}
while($start < strlen($dat))
{
$zac = zacatek($dat,$vzor1,$start);
$end = konec($dat,$vzor2,$start);
$text=$dat;
if($zac != -1)
{
$dat = zamena($dat,$zac,$end);
$start=$end+strlen($vzor2);
}
else
{
break;
}
}
echo $dat;
?>


:) Jen se mi natahla trosku function zamena ale funguje to :)
$vzorek1 je ve funkci a v kladam tam $vzor1 takze zacatek a tj. [kod]
jinak vysledek je zde mezi taky se zobacky vypisou..a va tagy se html tagy normalne pouzijou :))
Toto téma je uzamčeno. Odpověď nelze zaslat.