Mam taki problem. Tworzę modyfikację do phpBB zajmującą się automatycznym zaznaczaniem błędów ortograficznych w postach. Wygląda to tak:
<?
/* **************************************** *
* Skrypt do automatycznego zaznaczania *
* błędów ortograficznych w phpBB 2.0 *
* by Przemo. Autorzy: Adam Pilorz, Ktos *
* **************************************** */
$litery="abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ?ćęłńó?ĽżˇĆĘŁŃÓ??Ż"; // te literki będ? uznawane za kawałek wyrazu. Pozostałe znaki uznawane s? za separatory.
$rowid=0;
function get_mask()
{
global $rowid;
$ort=array(1=>"*ogule", "<ort>wogóle",</ort> "kłutni*", "kłuc*", "<ort>odrazu",</ort> "<ort>poprostu",</ort> "<ort>żeczywi*",</ort> "<ort>prub*",</ort> "nietylko");
$rowid=$rowid+1;
if($rowid<=9) { return $ort[$rowid]; }
else { return FALSE; }
}
function GetStart($tekst, $dana) {
global $litery;
for ($i = $dana; $i<=0, $i--;) {
if(($i==0) || (strpos($litery, substr($tekst, $i-1, 1)) === FALSE)) {
$start = $i;
return $start;
}
}
}
function GetEnd($tekst, $dana) {
global $litery;
$tekstlen=strlen($tekst);
for ($i = $dana; $i>=$tekstlen, $i++;) {
if((strpos($litery, substr($tekst, $i, 1)) === FALSE) || ($i==$tekstlen)) {
$end = $i;
return $end;
}
}
}
function Ortuj($tekst, $dana, &$end) {
$start = GetStart($tekst, $dana);
$end = GetEnd($tekst, $dana);
if((substr($tekst, $start-5, 5)!='[ort]') || (substr($tekst, $end, 6)!='[/ort]'))
{
$before = substr($tekst, 0, $start);
$after = substr($tekst, $end, strlen($tekst));
$error = substr($tekst, $start, $end - $start);
$end=$end+11;
return $before.'[ort]' . $error . '[/ort]'.$after;
}
else return $tekst;
}
function AutoOrt($post_message)
{
/*global $db;*/
//echo("<!-- ".$post_message." //-->");
/*$sql="SELECT * FROM my_phpbb_autoorts";
$result=$db->sql_query($sql);
while($row=$db->sql_fetchrow($result))*/
global $litery;
$rowid=0;
while($row=get_mask())
{
echo("<!-- ".$row." //-->");
$offset=0;
$mask=str_replace("*", "", $row);
$masklen=strlen($mask);
$pos=strpos($post_message, $mask, $offset);
while($pos!==FALSE)
{
$pos=$pos+1;
$ort=TRUE;
if((substr($row, 0, 1)!='*') && (strpos($litery, substr($post_message, $pos-2, 1))!==FALSE))
{
$ort=FALSE;
}
if((substr($row, -1)!='*') && (strpos($litery, substr($post_message, $pos+$masklen-1, 1))!==FALSE))
{
$ort=FALSE;
}
if($ort)
{
$end=0;
$post_message=Ortuj($post_message, $pos, $end);
$offset=$end;
}
else
{
$offset=$pos+$masklen;
}
$pos=strpos($post_message, $mask, $offset);
}
}
return $post_message;
}
?>
No i jak odpalę tą funkcję u siebie na localhoście (EasyPHP), to wsio działa, ale jak odpalę to na forum uruchomionym na Lycosie, to zaznacza tylko dwa pierwsze znaki z maski, resztę pozostawia poza tagiem. Co jest źle??