158 |
|
|
159 |
$url = $wordlinks[$name]['url']; |
$url = $wordlinks[$name]['url']; |
160 |
if ($url == '') |
if ($url == '') |
161 |
return '*felaktig wordlink*'; |
return '*felaktig ordlänk*'; |
162 |
|
|
163 |
switch ($wordlinks[$name]['enc']) { |
switch ($wordlinks[$name]['enc']) { |
164 |
case 'susning': |
case 'susning': |
225 |
function new_check_html($string, $strip = '') { |
function new_check_html($string, $strip = '') { |
226 |
|
|
227 |
# Den här funktionen ser till att bara godkända HTML-element och deras |
# Den här funktionen ser till att bara godkända HTML-element och deras |
228 |
# godkända HTML-attribut får förekomma i $string. |
# godkända HTML-attribut får förekomma i $string. Man måste ha tagit bort |
229 |
|
# eventuella slashes från magic quotes innan man anropar den här funktionen. |
230 |
|
|
231 |
global $allowed_html; |
global $allowed_html; |
232 |
|
|
246 |
# Den här funktionen letar upp HTML-taggar, delar upp dem i element och alla |
# Den här funktionen letar upp HTML-taggar, delar upp dem i element och alla |
247 |
# attribut, och anropar new_check_html_attr. |
# attribut, och anropar new_check_html_attr. |
248 |
|
|
249 |
$string = preg_replace('%<'. |
$string = preg_replace('%<\s*'. |
250 |
'(/?[a-z]+)'. # element |
'(/?[a-z]+)'. # element |
251 |
'(\s+'. # mellanrum |
'([^>]*)'. # alla attribut |
|
'(\'[^\']*\'|"[^"]*"|[^<>])*)'. # alla attribut |
|
252 |
'>%ei', |
'>%ei', |
253 |
'new_check_html_attr(\'\\1\', \'\\2\')', $string); |
"new_check_html_attr('\\1', '\\2')", $string); |
254 |
return $string; |
return $string; |
255 |
} |
} |
256 |
|
|
257 |
function new_check_html_attr($element, $attr) { |
function new_check_html_attr($element, $attr) { |
258 |
|
|
259 |
# Den här funktionen tar bort alla attribut, om elementet inte ska ha några. |
# Den här funktionen tar bort alla attribut, om elementet inte ska ha några. |
260 |
# Om det ska det delar den upp attributlistan i olika attribut, och anropar |
# Om det ska det går den igenom attributlistan och delar noggrant upp den i |
261 |
# new_check_html_attr2. |
# attribut, som sedan kontrolleras mot $allowed_html. |
262 |
|
|
263 |
global $allowed_html; |
global $allowed_html; |
264 |
|
|
265 |
$attr = stripslashes(stripslashes($attr)); |
$attr = stripslashes($attr); |
266 |
|
|
267 |
|
# Kolla om elementet ska ha några attribut alls. |
268 |
|
|
269 |
if (count($allowed_html[strtolower($element)]) == 0) |
if (count($allowed_html[strtolower($element)]) == 0) |
270 |
return "<$element>"; |
return "<$element>"; |
271 |
|
|
|
$attr = preg_replace('%(\s+([^=\s]+)'. # attributnamn |
|
|
'(\s*=\s*'. # lika med |
|
|
'(\'[^\']*\'|"[^"]*"|\S+))?)%ei', # attributvärde |
|
|
'new_check_html_attr2(\''.$element.'\', \'\\2\', '. |
|
|
'\'\\1\')', $attr); |
|
|
|
|
|
$attr = trim($attr); |
|
|
if ($attr != '') |
|
|
$attr = " $attr"; |
|
|
|
|
|
return "<$element$attr>"; |
|
|
} |
|
|
|
|
|
function new_check_html_attr2($element, $attributename, $wholeattribute) { |
|
|
|
|
|
# Den här funktionen tar bort alla attribut som inte är godkända, samt de |
|
|
# godkända attribut som inte är välformade. |
|
272 |
|
|
273 |
global $allowed_html; |
# Dela upp attributen, och lagra i $attrarr. |
|
|
|
|
$wholeattribute = stripslashes($wholeattribute); |
|
274 |
|
|
275 |
if ($allowed_html[strtolower($element)][strtolower($attributename)] != 1) |
$attr = preg_replace('/javascript\s*:\s*/i', '', $attr); |
|
return ''; |
|
276 |
|
|
277 |
if ((!preg_match('%^\s+[^=\s]+\s*=\s*\'[^\']*\'$%', $wholeattribute)) and |
$attrarr = array(); |
278 |
(!preg_match('%^\s+[^=\s]+\s*=\s*"[^"]*"$%', $wholeattribute)) and |
$mode = 0; |
279 |
(preg_match('%["\']%', $wholeattribute))) |
$attrname = ''; |
280 |
return ''; |
|
281 |
|
while (strlen($attr) != 0) |
282 |
|
{ |
283 |
|
$working = 0; # anger om operationen har lyckats eller inte |
284 |
|
|
285 |
|
switch ($mode) |
286 |
|
{ |
287 |
|
case 0: # attributnamn, exempelvis href |
288 |
|
|
289 |
|
if (preg_match('/^([a-z]+)/i', $attr, $match)) |
290 |
|
{ |
291 |
|
$attrname = $match[1]; |
292 |
|
$working = $mode = 1; |
293 |
|
$attr = preg_replace('/^[a-z]+/i', '', $attr); |
294 |
|
} |
295 |
|
|
296 |
|
break; |
297 |
|
|
298 |
|
|
299 |
|
case 1: # lika med eller bara tomt ("selected") |
300 |
|
|
301 |
|
if (preg_match('/^\\s*=\\s*/', $attr)) # lika med |
302 |
|
{ |
303 |
|
$working = 1; $mode = 2; |
304 |
|
$attr = preg_replace('/^\\s*=\\s*/', '', $attr); |
305 |
|
break; |
306 |
|
} |
307 |
|
|
308 |
|
if (preg_match('/^\\s+/', $attr)) # tomt |
309 |
|
{ |
310 |
|
$working = 1; $mode = 0; |
311 |
|
$attrarr[] = array |
312 |
|
('name' => $attrname, |
313 |
|
'whole' => $attrname); |
314 |
|
$attr = preg_replace('/^\\s+/', '', $attr); |
315 |
|
} |
316 |
|
|
317 |
|
break; |
318 |
|
|
319 |
|
|
320 |
|
case 2: # attributvärde, exempelvis en URL efter href= |
321 |
|
|
322 |
|
if (preg_match('/^("[^"]*")(\s+|$)/', $attr, $match)) |
323 |
|
# "värde" |
324 |
|
{ |
325 |
|
$attrarr[] = array |
326 |
|
('name' => $attrname, |
327 |
|
'whole' => "$attrname=$match[1]"); |
328 |
|
$working = 1; $mode = 0; |
329 |
|
$attr = preg_replace('/^"[^"]*"(\s+|$)/', '', $attr); |
330 |
|
break; |
331 |
|
} |
332 |
|
|
333 |
|
if (preg_match("/^('[^']*')(\s+|$)/", $attr, $match)) |
334 |
|
# 'värde' |
335 |
|
{ |
336 |
|
$attrarr[] = array |
337 |
|
('name' => $attrname, |
338 |
|
'whole' => "$attrname=$match[1]"); |
339 |
|
$working = 1; $mode = 0; |
340 |
|
$attr = preg_replace("/^'[^']*'(\s+|$)/", '', $attr); |
341 |
|
break; |
342 |
|
} |
343 |
|
|
344 |
|
if (preg_match("%^([-_.:/a-zA-Z0-9]+)(\s+|$)%", $attr, $match)) |
345 |
|
# värde |
346 |
|
{ |
347 |
|
$attrarr[] = array |
348 |
|
('name' => $attrname, |
349 |
|
'whole' => "$attrname=$match[1]"); |
350 |
|
$working = 1; $mode = 0; |
351 |
|
$attr = preg_replace("%^[-_.:/a-zA-Z0-9]+(\s+|$)%", |
352 |
|
'', $attr); |
353 |
|
} |
354 |
|
|
355 |
|
break; |
356 |
|
} |
357 |
|
|
358 |
|
if ($working == 0) |
359 |
|
# inte välformad, ta bort t o m nästa mellanslag |
360 |
|
{ |
361 |
|
$attr = preg_replace('/^\S*\s*/', '', $attr); |
362 |
|
$mode = 0; |
363 |
|
} |
364 |
|
} # while |
365 |
|
|
366 |
|
|
367 |
|
if ($mode == 1) |
368 |
|
# specialfall, om attributen slutar med ett tomt attribut som "selected" |
369 |
|
$attrarr[] = array |
370 |
|
('name' => $attrname, |
371 |
|
'whole' => $attrname); |
372 |
|
|
373 |
|
|
374 |
|
# Gå igenom $attrarr, och spara endast de tillåtna attributen för det |
375 |
|
# här elementet. |
376 |
|
|
377 |
|
$attr2 = ''; |
378 |
|
|
379 |
|
foreach ($attrarr as $arreach) |
380 |
|
if ($allowed_html[strtolower($element)][strtolower($arreach['name'])] |
381 |
|
== 1) |
382 |
|
$attr2 .= ' '.$arreach['whole']; |
383 |
|
|
|
return $wholeattribute; |
|
|
} |
|
384 |
|
|
385 |
function FixQuotes ($what = "") { |
return "<$element$attr2>"; |
|
$what = ereg_replace("'","''",$what); |
|
|
while (eregi("\\\\'", $what)) { |
|
|
$what = ereg_replace("\\\\'","'",$what); |
|
|
} |
|
|
return $what; |
|
386 |
} |
} |
387 |
|
|
388 |
/*********************************************************/ |
/*********************************************************/ |
882 |
return $rs; |
return $rs; |
883 |
} |
} |
884 |
|
|
885 |
|
function FixQuotes ($what = "") { |
886 |
|
$what = ereg_replace("'","''",$what); |
887 |
|
while (eregi("\\\\'", $what)) { |
888 |
|
$what = ereg_replace("\\\\'","'",$what); |
889 |
|
} |
890 |
|
return $what; |
891 |
|
} |
892 |
|
|
893 |
# quote the slashes for mysql (missing php function?) |
# quote the slashes for mysql (missing php function?) |
894 |
function myslashes($content = "") { |
function myslashes($content = "") { |
895 |
$content = str_replace("\\","\\\\",$content); |
$content = str_replace("\\","\\\\",$content); |
897 |
return $content; |
return $content; |
898 |
} |
} |
899 |
|
|
|
|
|
900 |
/*********************************************************/ |
/*********************************************************/ |
901 |
/* Spell check functions */ |
/* Spell check functions */ |
902 |
/*********************************************************/ |
/*********************************************************/ |