Det er vores E-mail/link parser som har et problem. Den sætter ; ind hvis det sidste tegn er et \" og hvis der er path.
Eks:
www.eksperten.dk/test\";Fejlen vil blive rettet, og har nogen lyst til at hjælpe er I meget velkomne :)
Her er problembarnet :
<?
class tagster {
function email_tagster ($str) {
$goodchars1 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";
$goodchars2 = \".-_\";
$mailto_tag1 = \"<A HREF=\\\"mailto:\";
$mailto_tag2 = \"\\\">\";
$mailto_tag3 = \"</A>\";
// find antal @
/*
$ats = count_chars($str);
$ats = $ats[ord(\"@\")];
*/
$ats = explode(\"@\", $str);
$ats = count($ats);
do {
$ats_n++;
$pos_at = intval(strpos($str, \"@\", $pos_at));
$passed_dot = false;
if ($pos_at == 0) {
break;
}
$strlen = strlen($str);
// find start
for ($n = ($pos_at - 1); $n > 0; $n--) { // spol tilbage indtil vi finder bad char.
if (strpos($goodchars1.$goodchars2, substr($str, $n, 1)) === false) {
$n++;
break;
}
}
// sørg for at vi ikke starter med $goodchars2
for ($n = $n; $n <= $strlen; $n++) { // spol frem indtil vi finder good char.
if (strpos($goodchars2, substr($str, $n, 1)) === false) {
break;
}
}
$pos_start = $n;
// find end
for ($n = ($pos_at + 1); $n <= $strlen; $n++) { // spol frem indtil vi finder good char.
if (!$passed_dot && substr($str, $n, 1) == \".\") {
$passed_dot = true;
}
if (strpos($goodchars1.$goodchars2, substr($str, $n, 1)) === false) {
break;
}
}
// sørg for at vi ikke ender med $goodchars2
do {
$n--;
if (strpos($goodchars2, substr($str, $n, 1)) === false) {
$n++;
break;
}
} while ($n > 0 && !(strpos($goodchars2, substr($str, $n, 1)) === false));
$pos_end = $n;
$email = substr($str, $pos_start, $pos_end - $pos_start);
$pos_plus = strlen($mailto_tag1.$mailto_tag2.$mailto_tag3.$email);
$email = $mailto_tag1.$email.$mailto_tag2.$email.$mailto_tag3;
if ($pos_at == $pos_start || $pos_at == ($pos_end - 1) || !$passed_dot) {
$is_email = false;
} else {
$is_email = true;
}
if ($is_email) {
$new_str = substr($str, 0, $pos_start);
$new_str .= $email;
$new_str .= substr($str, $pos_end);
$str = $new_str;
$strlen = strlen($str);
$pos_at = $pos_end + $pos_plus;
} else {
$pos_at = $pos_end;
}
} while ($ats_n <= $ats);
return $str;
}
function url_tagster ($str) {
$start_tag_array = array(\"www.\", \"
http://\");
$goodchars1 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";
$goodchars2 = \".-\";
$goodchars3 = \"/_#?&=~;,\";
$link_tag_1 = \"<A HREF=\\\"\";
$link_tag_2 = \"\\\" TARGET=\\\"_blank\\\">\";
$link_tag_3 = \"</A>\";
$link_tag_4 = \"
http://\"; $strlen = strlen($str);
// find antal start tags
$start_tags1 = explode($start_tag_array[0], $str);
$start_tags2 = explode($start_tag_array[1], $str);
$start_tags = count($start_tags1) + count($start_tags2) - 2;
do {
$start_tags_n++;
$passed_slash = false;
$passed_dot = false;
// find start tag
$pos_start_1 = strpos(strtolower($str), $start_tag_array[0], $pos_start);
$pos_start_2 = strpos(strtolower($str), $start_tag_array[1], $pos_start);
if ($pos_start_1 === false && $pos_start_2 === false) {
break;
}
if ($pos_start_1 === false) { $pos_start_1 = $strlen; }
if ($pos_start_2 === false) { $pos_start_2 = $strlen; }
if ($pos_start_1 < $pos_start_2) {
$pos_start = $pos_start_1;
$pos_search = $pos_start + strlen($start_tag_array[0]);
} else {
$pos_start = $pos_start_2;
$pos_search = $pos_start + strlen($start_tag_array[1]);
}
// find end tag
for ($n = $pos_search; $n <= $strlen; $n++) {
if (!$passed_slash && substr($str, $n, 1) == \"/\") {
$passed_slash = true;
}
if (!$passed_slash && !$passed_dot && substr($str, $n, 1) == \".\") {
$passed_dot = true;
}
if ($passed_slash) {
// vi er forbi /
if (strpos($goodchars1.$goodchars2.$goodchars3, substr($str, $n, 1)) === false) {
break;
}
} else {
// vi er ikke forbi /
if (strpos($goodchars1.$goodchars2, substr($str, $n, 1)) === false) {
break;
}
}
}
// sørg for at vi ikke ender med $goodchars2 eller $goodchars3
do {
$n--;
if (strpos($goodchars2.$goodchars3, substr($str, $n, 1)) === false) {
$n++;
break;
}
} while ($n > 0 && !(strpos($goodchars2.$goodchars3, substr($str, $n, 1)) === false));
$pos_end = $n;
$link = substr($str, $pos_start, $pos_end - $pos_start);
$pos_plus = strlen($link_tag_1.$link_tag_2.$link_tag_3.$link);
if (strtolower(substr($link, 0, strlen($link_tag_4))) != $link_tag_4) {
$pos_plus = $pos_plus + strlen($link_tag_4);
$link = $link_tag_1.$link_tag_4.$link.$link_tag_2.$link.$link_tag_3;
} else {
$link = $link_tag_1.$link.$link_tag_2.$link.$link_tag_3;
}
if ($passed_dot) {
$new_str = substr($str, 0, $pos_start);
$new_str .= $link;
$new_str .= substr($str, $pos_end);
$str = $new_str;
$strlen = strlen($str);
$pos_start = $pos_end + $pos_plus;
} else {
$pos_start = $pos_end;
}
} while ($start_tags_n <= $start_tags);
return $str;
}
}
?>