/[gnuheter]/gnuheter/mainfile.php
ViewVC logotype

Diff of /gnuheter/mainfile.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.30 by pawal, Sat Nov 30 21:52:47 2002 UTC revision 1.31 by metaur, Sun Dec 1 23:34:35 2002 UTC
# Line 158  function wordlinksProc($name, $str) { Line 158  function wordlinksProc($name, $str) {
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':
# Line 225  function printAllowedHTML() { Line 225  function printAllowedHTML() {
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    
# Line 245  function new_check_html_split($string) { Line 246  function new_check_html_split($string) {
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  /*********************************************************/  /*********************************************************/
# Line 805  function stripslashes_array($content = a Line 882  function stripslashes_array($content = a
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);
# Line 812  function myslashes($content = "") { Line 897  function myslashes($content = "") {
897      return $content;      return $content;
898  }  }
899    
   
900  /*********************************************************/  /*********************************************************/
901  /* Spell check functions                                 */  /* Spell check functions                                 */
902  /*********************************************************/  /*********************************************************/

Legend:
Removed from v.1.30  
changed lines
  Added in v.1.31

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26