mirror of
				https://git.tt-rss.org/fox/tt-rss.git
				synced 2025-10-31 03:40:59 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| if (!function_exists('mb_strlen')) 
 | |
| {
 | |
|   // from Typo3
 | |
|   // author Martin Kutschker <martin.t.kutschker@blackbox.net>
 | |
|   function mb_strlen($str, $encoding="utf-8") 
 | |
|     {
 | |
|       if($encoding != "utf-8")
 | |
| 	{ return -1; }
 | |
| 
 | |
|       $n=0;
 | |
| 
 | |
|       for($i=0; isset($str{$i}); $i++) 
 | |
| 	{	  
 | |
| 	  $c = ord($str{$i});
 | |
| 
 | |
| 	  if (!($c & 0x80)) // single-byte (0xxxxxx)
 | |
| 	    $n++;
 | |
| 
 | |
| 	  elseif (($c & 0xC0) == 0xC0) // multi-byte starting byte (11xxxxxx)
 | |
| 	    $n++;
 | |
| 	}
 | |
| 
 | |
|       return $n;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('mb_substr'))
 | |
| {
 | |
|   // from Typo3
 | |
|   // author Martin Kutschker <martin.t.kutschker@blackbox.net>
 | |
|   function mb_substr($str, $start, $len=null, $encoding="utf-8")
 | |
|     {
 | |
|       if($encoding != "utf-8")
 | |
| 	{ return -1; }
 | |
| 
 | |
|       $byte_start = utf8_char2byte_pos($str,$start);
 | |
| 
 | |
|       if ($byte_start === false) 
 | |
| 	return false; // $start outside string length 
 | |
| 
 | |
|       $str = substr($str,$byte_start); 
 | |
| 
 | |
|       if ($len != null) 
 | |
| 	{
 | |
| 	  $byte_end = utf8_char2byte_pos($str,$len);
 | |
| 
 | |
| 	  if ($byte_end === false) // $len outside actual string length
 | |
| 	    return $str;
 | |
| 	  else	  
 | |
| 	    return substr($str,0,$byte_end);
 | |
| 	}
 | |
| 
 | |
|       else return $str;
 | |
|     }
 | |
| 
 | |
|   function utf8_char2byte_pos($str,$pos) 
 | |
|     {
 | |
|       $n = 0;  // number of characters found     
 | |
|       $p = abs($pos); // number of characters wanted 
 | |
| 
 | |
|       if ($pos >= 0) 
 | |
| 	{
 | |
| 	  $i = 0;
 | |
| 	  $d = 1;
 | |
| 	} else {       
 | |
| 	  $i = strlen($str)-1;
 | |
| 	  $d = -1;
 | |
| 	} 
 | |
| 
 | |
|       for( ; isset($str{$i}) && $n<$p; $i+=$d) 
 | |
| 	{
 | |
| 	  $c = (int)ord($str{$i});
 | |
| 	  
 | |
| 	  if (!($c & 0x80)) // single-byte (0xxxxxx)	    
 | |
| 	    $n++;
 | |
| 	  elseif (($c & 0xC0) == 0xC0) // multi-byte starting byte (11xxxxxx)
 | |
| 	    $n++;
 | |
| 	}
 | |
| 
 | |
|       if (!isset($str{$i})) 
 | |
| 	return false; // offset beyond string length 
 | |
| 
 | |
|       if ($pos >= 0) 
 | |
| 	{
 | |
| 	  // skip trailing multi-byte data bytes
 | |
| 	  while ((ord($str{$i}) & 0x80) && !(ord($str{$i}) & 0x40)) 
 | |
| 	    { $i++; }
 | |
| 	} else {	  
 | |
| 	  // correct offset
 | |
| 	  $i++;
 | |
| 	} 
 | |
|           
 | |
|       return $i;      
 | |
| 	 }
 | |
| 
 | |
| 	if (!function_exists('mb_strtolower')) {
 | |
| 	  function mb_strtolower($msg, $encoding) {
 | |
| 		  return $msg;
 | |
| 		}
 | |
| 	}
 | |
| }
 |