'utf-8') // valeur defaut
setcookie('kodo', $kodo, time()+3600*24*365, '/');
}
/// demarre le buffer si nécessaire
if ($kodo<>'utf-8') {
ob_start('kodo');
}
/// traite le buffer
function kodo($source) {
if ($GLOBALS['kodo'] == 'cx')
return esperanto_cx($source);
else if ($GLOBALS['kodo'] == 'entites')
return utf8ToUnicodeEntities ($source);
else
return $source;
}
/// pour afficher un bloc de choix de code
function kodo_bloc() {
echo "
\n";
echo "
KODO:\n";
$kododo=$GLOBALS['kodo'];
if (!$kododo) $kododo='utf-8';
$lien = $GLOBALS['clean_link'];
$codes = array('cx', 'utf-8', 'entites');
while (list(,$code) = each ($codes)) {
$lien->addVar('var_kodo', $code);
$link = $lien->getUrl();
echo ($kododo==$code) ? "
$code" : "
$code";
echo "
\n";
}
echo "
\n";
}
/**
* takes a string of utf-8 encoded characters and converts it to a string of unicode entities
* each unicode entitiy has the form nnnnn; n={0..9} and can be displayed by utf-8 supporting
* browsers
* @param $source string encoded using utf-8 [STRING]
* @return string of unicode entities [STRING]
* @access public
*/
function utf8ToUnicodeEntities ($source) {
// array used to figure what number to decrement from character order value
// according to number of characters used to map unicode to ascii by utf-8
$decrement[4] = 240;
$decrement[3] = 224;
$decrement[2] = 192;
$decrement[1] = 0;
// the number of bits to shift each charNum by
$shift[1][0] = 0;
$shift[2][0] = 6;
$shift[2][1] = 0;
$shift[3][0] = 12;
$shift[3][1] = 6;
$shift[3][2] = 0;
$shift[4][0] = 18;
$shift[4][1] = 12;
$shift[4][2] = 6;
$shift[4][3] = 0;
$pos = 0;
$len = strlen ($source);
$encodedString = '';
while ($pos < $len) {
$asciiPos = ord (substr ($source, $pos, 1));
if (($asciiPos >= 240) && ($asciiPos <= 255)) {
// 4 chars representing one unicode character
$thisLetter = substr ($source, $pos, 4);
$pos += 4;
}
else if (($asciiPos >= 224) && ($asciiPos <= 239)) {
// 3 chars representing one unicode character
$thisLetter = substr ($source, $pos, 3);
$pos += 3;
}
else if (($asciiPos >= 192) && ($asciiPos <= 223)) {
// 2 chars representing one unicode character
$thisLetter = substr ($source, $pos, 2);
$pos += 2;
}
else {
// 1 char (lower ascii)
$thisLetter = substr ($source, $pos, 1);
$pos += 1;
}
// 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++;
}
if ($thisLen == 1)
$encodedLetter = $thisLetter;
//$encodedLetter = "". str_pad($decimalCode, 3, "0", STR_PAD_LEFT) . ';';
else
$encodedLetter = "". str_pad($decimalCode, 5, "0", STR_PAD_LEFT) . ';';
$encodedString .= $encodedLetter;
}
return $encodedString;
}
function esperanto_cx($source) {
$esperanto = array (
'Ĉ' => 'Cx',
'ĉ' => 'cx',
'Ĝ' => 'Gx',
'ĝ' => 'gx',
'Ĥ' => 'Hx',
'ĥ' => 'hx',
'Ĵ' => 'Jx',
'ĵ' => 'jx',
'Ŝ' => 'Sx',
'ŝ' => 'sx',
'Ŭ' => 'Ux',
'ŭ' => 'ux'
);
$encoded = utf8ToUnicodeEntities ($source);
$encoded = strtr ($encoded, $esperanto);
return $encoded;
}
?>