Location: PHPKode > projects > YW-GuestBook > YW Guestbook 1.45/YW Guestbook/ywgb/libs/string_utf8.php
<?php
  //-------------------------------------------------------------------------
  //                             YW Guestbook
  //                             string_utf8.php
  //
  //                              Version: 1.2
  //-------------------------------------------------------------------------
  //                     Copyright (c) 2005  YahooWebs
  //                        http://www.yahoowebs.tk
  //-------------------------------------------------------------------------
  //  This program is free software. You can redistribute it and/or modify
  //  it under the terms of the License that was distributed with this file!
  //-------------------------------------------------------------------------

  function vgb_maxlen () {
    return 85;
  }

  function vgb_lenfactor () {
    return 3;
  }
  
  function vgb_strlen ( $s ) {
    return strlen(utf8_decode($s));
  }

  function vgb_string( $t ) {
    // returns the string without invalid bytes in the current encoding
    
    $t .= " ";
    $i = 0;
    $s = 0;
    $o = "";
    $b = "";
    $n = strlen($t);
    while ($i < $n) {
      $x = $t[$i];
      $xo = ord($x);
      switch ($s) {
        case 0: $i++;
                if ($xo < 128)
                  $o .= $x;
                elseif (($xo < 192) || ($xo > 253))
                  $o .= "?";
                else {
                  $s = 1;
                  $b = $x;
                  $l = 1;
                  if ($xo > 223) {
                    $l++;
                    if ($xo > 239) {
                      $l++;
                      if ($xo > 247) {
                        $l++;
                        if ($xo > 251)
                          $l++;
                      }
                    }
                  }
                }
                break;
        case 1: if (($xo < 128) || ($xo > 191)) {
                  for ($j=0;$j<strlen($b);$j++) 
                    $o .= "?";
                  $s = 0;
                }
                else {
                  $i++;
                  $b .= $x;
                  $l--;
                  if ($l == 0) {
                    $o .= $b;
                    $s = 0;
                  }
                }
      }
    }
    return chop($o);
  }

  function vgb_wrapWords ( $t ) {
    global $settings;

    $maxcount = $settings['FORCEBREAK'];
    if (($maxcount == 0) || ($t == ""))
      return $t;

    $t = str_replace("&gt;",">>>>",str_replace("&lt;",">>><",$t));
    $o = "";
    $inTag = false;
    $save = false;
    $count = 0;
    $tlen = strlen($t);
    $skip = 0;

    for ($i=0;$i<$tlen;$i++)
      if ($skip > 1) {
        $skip--;
        if ($save)
          $buffer .= $t[$i];
      }
      elseif ($inTag) {
        if ($t[$i] == '>') {
          $inTag = false;
          $tag = explode(" ",$buffer,2);
          switch ($tag[0]) {
            case "li":
            case "pre":
            case "/pre":
            case "div":
            case "/div":
            case "ul":
            case "/ul": $count = 0;
          }
        }
        else
          $buffer .= $t[$i];
        $o .= $t[$i];
      }
      elseif ((ord($t[$i]) > 191) && (ord($t[$i]) < 254) && ($skip == 0)) {
        $save = true;
        $buffer = $t[$i];
        $skip = 1;
        if (ord($t[$i]) > 223) {
          $skip++;
          if (ord($t[$i]) > 239) {
            $skip++;
            if (ord($t[$i]) > 247) {
              $skip++;
              if (ord($t[$i]) > 251)
                $skip++;
            }
          }
        }
      }
      elseif ($t[$i] == '>' && ($skip == 0))
        $skip = 3;
      elseif (($t[$i] == '<') && ($skip == 0)) {
        $o .= '<';
        $buffer = "";
        $inTag = true;
      }
      else {
        if (vgb_isWhiteSpace($t[$i]) && !$save) {
          $count = 0;
          $o .= $t[$i];
        }
        else {
          $count++;
          if ($count > $maxcount) {
            $count = 1;
            $o .= ($settings['USEWBR']) ? "<wbr />" : " ";
          }
          if ($skip > 0) {
            if ($save) {
              $o .= $buffer.$t[$i];
              $save = 0;
            }
            elseif ($t[$i] == '>')
              $o .= "&gt;";
            else
              $o .= "&lt;";
            $skip = 0;
          }
          else
            $o .= $t[$i];
        }
      }
      if ($save)
        $o .= $buffer;
      return $o;
  }
  
  function vgb_substr ( $t , $n ) {
  
    if ($n == 0) 
      return "";
    else {
      $o = "";
      $i = 0;
      $m = strlen($t);
      while ($i < $m) {
        if ((ord($t[$i]) > 191) && (ord($t[$i]) < 254)) {
          $x = 1;
          if (ord($t[$i]) > 223) {
            $x++;
            if (ord($t[$i]) > 239) {
              $x++;
              if (ord($t[$i]) > 247) {
                $x++;
                if (ord($t[$i]) > 251) 
                  $x++;
              }
            }
          }
          
          if (($x+$i) < $m) {
            $v = 1;
            for ($j=$i+1;$j<=($x+$i);$j++) 
              if ((ord($t[$j]) < 128) || (ord($t[$j]) > 191)) 
                $v = 0; 
              
            if ($v) 
              for ($j=0;$j<$x;$j++) {
                $o .= $t[$i];
                $i++;
              }
          }
        }
        $o .= $t[$i];
        $n--;
        $i++;
        if ($n == 0) 
          $i = $m;
      }
      return $o;
    }
  }

  function vgb_nextchar( $in ) {
    
    if (ord($in[0]) < 128)
      return $in[0];
    elseif (ord($in[0]) < 192)
      return '?';
    else {
      $n = 1;
      if (ord($in[0]) > 223) {
        $n++;
        if (ord($in[0]) > 239) {
          $n++;
          if (ord($in[0]) > 247) {
            $n++;
            if (ord($in[0]) > 251) 
              $n++;
          }
        }
      }
      if (strlen($in)<($n+1))
        return '?';
      $b = $in[0];
      for ($i=1;$i<=$n;$i++)
        if ((ord($in[$i]) < 128) || (ord($in[$i]) > 191))
          return "?";
        else
          $b .= $in[$i];
      return $b;
    }
  }
  
  function vgb_ord ( $c ) {
    if ($c == "")
      return 0;
    if (ord($c[0]) < 128)
      return ord($c);
    elseif ((ord($c[0]) < 192) || (ord($c[0]) > 253))
      return 0;
    else {
      $n = 1;
      if (ord($c[0]) > 223) {
        $n++;
        if (ord($c[0]) > 239) {
          $n++;
          if (ord($in[0]) > 247) {
            $n++;
            if (ord($in[0]) > 251) 
              $n++;
          }
        }
      }
      for ($i=1;$i<=$n;$i++) 
        if (($i > strlen($c)-1) || (ord($c[$i]) < 128) || (ord($c[$i]) > 191)) 
          return 0;
        
      switch ($n) {
        case 1: return (ord($c[1])&63)+((ord($c[0])&31)<<6);
        case 2: return (ord($c[2])&63)+((ord($c[1])&63)<<6)+((ord($c[0])&15)<<12);
        case 3: return (ord($c[3])&63)+((ord($c[2])&63)<<6)+((ord($c[1])&63)<<12)
                       +((ord($c[0])&7)<<18);
        case 4: return (ord($c[4])&63)+((ord($c[3])&63)<<6)+((ord($c[2])&63)<<12)
                       +((ord($c[1])&63)<<18)+((ord($c[0])&3)<<24);
        case 5: return (ord($c[5])&63)+((ord($c[4])&63)<<6)+((ord($c[3])&63)<<12)
                       +((ord($c[2])&63)<<18)+((ord($c[1])&63)<<24)+((ord($c[0])&1)<<30);
      }
      return 0;
    }
  }
  
?>
Return current item: YW-GuestBook