--- diary.php.old Wed Jul 3 15:38:34 2002 +++ diary.php Wed Jul 10 17:50:19 2002 @@ -26,7 +26,8 @@ include('mainfile.php'); -# what do display? (setup $user and $did) +# what to display? (setup $user and $did) +isRealUser($HTTP_COOKIE_VARS['user']); $did = (int) $HTTP_GET_VARS['did']; $cookie = cookiedecode($HTTP_COOKIE_VARS['user']); if (!$did) $did = 0; @@ -51,9 +52,65 @@ } function diary_strip_tags ($string) { - return strip_tags($string,"
");
+ $string = strip_tags($string,"
");
+ $string = only_href($string);
+ return $string;
}
+function only_href($string) {
+
+# Den här funktionen letar upp HTML-taggar, delar upp dem i element och alla attribut,
+# och anropar only_href_attr.
+
+ $string = preg_replace('%<'.
+ '(/?[a-z]+)'. # element
+ '(\s+'. # mellanrum
+ '(\'[^\']*\'|"[^"]*"|[^<>])*)'. # alla attribut
+ '>%ei',
+ 'only_href_attr(\'\\1\', \'\\2\')', $string);
+ return $string;
+}
+
+function only_href_attr($element, $attr) {
+
+# Den här funktionen tar bort alla attribut, om elementet inte är .
+# Om det är delar den upp attributlistan i olika attribut, och anropar
+# only_href_attr_check.
+
+ $attr = stripslashes(stripslashes($attr));
+
+ if (strtolower($element) != 'a')
+ return "<$element>";
+
+ $attr = preg_replace('%(\s+([^=\s]+)'. # attributnamn
+ '(\s*=\s*'. # lika med
+ '(\'[^\']*\'|"[^"]*"|\S+))?)%ei', # attributvärde
+ 'only_href_attr_check(\'\\2\', \'\\1\')', $attr);
+
+ $attr = trim($attr);
+ if ($attr != '')
+ $attr = " $attr";
+
+ return "<$element$attr>";
+}
+
+function only_href_attr_check($attributename, $wholeattribute) {
+
+# Den här funktionen tar bort alla attribut som inte är href=, samt de
+# href-attribut som inte är välformade.
+
+ $wholeattribute = stripslashes($wholeattribute);
+
+ if (strtolower($attributename) != 'href')
+ return '';
+
+ if ((!preg_match('%^\s+[^=\s]+\s*=\s*\'[^\']*\'$%', $wholeattribute)) and
+ (!preg_match('%^\s+[^=\s]+\s*=\s*"[^"]*"$%', $wholeattribute)) and
+ (preg_match('%["\']%', $wholeattribute)))
+ return '';
+
+ return $wholeattribute;
+}
function diary_display($did=0, $user=false) {
global $loggeduser;
@@ -165,14 +222,15 @@
+ Inlägget:
Du kan använda en del HTML om du vill, dock en begränsad del av de märkord som finns.
- Inga automatiska radbrytningar görs, du för göra dem med <br> eller <p>.
- Använd inte citationstecken i länkar (a href=)! Man får dessutom bara skriva ett inlägg per dygn.
+ Inga automatiska radbrytningar görs, du får göra dem med <br> eller <p>.
+ Man får dessutom bara skriva ett inlägg per dygn.
+ Nu går det att använda citationstecken i länkar (a href="")!
}