X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fnormal%2FUtfNormalUtil.php;h=6c925dfafef6afe43410e184d4858cd40830ab66;hb=4c0f5ab1dae6481fd5cbe7308ea76a7100575f3e;hp=443516bcc1baaa028554ac0da2f5752a18c16f31;hpb=6b9c23cf6d47c4c854fd95acdbb72fd577aae8f8;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/normal/UtfNormalUtil.php b/includes/normal/UtfNormalUtil.php index 443516bcc1..6c925dfafe 100644 --- a/includes/normal/UtfNormalUtil.php +++ b/includes/normal/UtfNormalUtil.php @@ -34,16 +34,27 @@ * @public */ function codepointToUtf8( $codepoint ) { - if($codepoint < 0x80) return chr($codepoint); - if($codepoint < 0x800) return chr($codepoint >> 6 & 0x3f | 0xc0) . - chr($codepoint & 0x3f | 0x80); - if($codepoint < 0x10000) return chr($codepoint >> 12 & 0x0f | 0xe0) . - chr($codepoint >> 6 & 0x3f | 0x80) . - chr($codepoint & 0x3f | 0x80); - if($codepoint < 0x110000) return chr($codepoint >> 18 & 0x07 | 0xf0) . - chr($codepoint >> 12 & 0x3f | 0x80) . - chr($codepoint >> 6 & 0x3f | 0x80) . - chr($codepoint & 0x3f | 0x80); + if ( $codepoint < 0x80 ) { + return chr( $codepoint ); + } + + if ( $codepoint < 0x800 ) { + return chr( $codepoint >> 6 & 0x3f | 0xc0 ) . + chr( $codepoint & 0x3f | 0x80 ); + } + + if ( $codepoint < 0x10000 ) { + return chr( $codepoint >> 12 & 0x0f | 0xe0 ) . + chr( $codepoint >> 6 & 0x3f | 0x80 ) . + chr( $codepoint & 0x3f | 0x80 ); + } + + if ( $codepoint < 0x110000 ) { + return chr( $codepoint >> 18 & 0x07 | 0xf0 ) . + chr( $codepoint >> 12 & 0x3f | 0x80 ) . + chr( $codepoint >> 6 & 0x3f | 0x80 ) . + chr( $codepoint & 0x3f | 0x80 ); + } echo "Asked for code outside of range ($codepoint)\n"; die( -1 ); @@ -60,10 +71,11 @@ function codepointToUtf8( $codepoint ) { */ function hexSequenceToUtf8( $sequence ) { $utf = ''; - foreach( explode( ' ', $sequence ) as $hex ) { + foreach ( explode( ' ', $sequence ) as $hex ) { $n = hexdec( $hex ); $utf .= codepointToUtf8( $n ); } + return $utf; } @@ -80,6 +92,7 @@ function utf8ToHexSequence( $str ) { foreach ( preg_split( '//u', $str, -1, PREG_SPLIT_NO_EMPTY ) as $cp ) { $buf .= sprintf( '%04x ', utf8ToCodepoint( $cp ) ); } + return rtrim( $buf ); } @@ -107,6 +120,7 @@ function utf8ToCodepoint( $char ) { if ( $length != strlen( $char ) ) { return false; } + if ( $length == 1 ) { return ord( $char ); } @@ -116,7 +130,7 @@ function utf8ToCodepoint( $char ) { $z >>= $length; # Add in the free bits from subsequent bytes - for ( $i=1; $i < $length; $i++ ) { + for ( $i = 1; $i < $length; $i++ ) { $z <<= 6; $z |= ord( $char[$i] ) & 0x3f; } @@ -136,5 +150,5 @@ function escapeSingleString( $string ) { array( '\\' => '\\\\', '\'' => '\\\'' - )); + ) ); }