= 240) && ($asciiPos <= 255)) // 4 chars representing one unicode character $i=4; else if (($asciiPos >= 224) && ($asciiPos <= 239)) // 3 chars representing one unicode character $i=3; else if (($asciiPos >= 192) && ($asciiPos <= 223)) // 2 chars representing one unicode character $i=2; else // 1 char (lower ascii) $i=1; $thisLetter = substr($source, $pos, $i); $pos += $i; // process the string representing the letter to a unicode entity $thisLen = strlen($thisLetter); $thisPos = 0; $decimalCode = 0; while ($thisPos < $thisLen) { $thisCharOrd = ord(substr($thisLetter, $thisPos, 1)); if ($thisPos == 0) { $charNum = intval($thisCharOrd - $decrement[$thisLen]); $decimalCode += ($charNum << $shift[$thisLen][$thisPos]); } else { $charNum = intval($thisCharOrd - 128); $decimalCode += ($charNum << $shift[$thisLen][$thisPos]); } $thisPos++; } $encodedLetter = '&#'. str_pad($decimalCode, ($thisLen==1)?3:5, '0', STR_PAD_LEFT).';'; $encodedString .= $encodedLetter; } return $encodedString; } // vim:set et sw=4 sts=4 ts=4 fenc=utf-8: ?>