note 57416 added to function.imagettftext
| From: | limalopex dot eisfux dot de at osu1 dot php dot net | Date: | Mon, 03 Oct 2005 16:17:16 +0000 |
| Subject: | note 57416 added to function.imagettftext | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-96303@lists.php.net to get a copy of this message | ||
If you have problems displaying german umlauts or other chars with an ascii value > 127, try to
convert the text-parameter first. The following function converts character-values > 127 (both:
UTF-8 + ANSI) to HTML's numeric coded entities:
<?php
define('EMPTY_STRING', '');
function foxy_utf8_to_nce(
$utf = EMPTY_STRING
) {
if($utf == EMPTY_STRING) return($utf);
$max_count = 5; // flag-bits in $max_mark ( 1111 1000 == 5 times 1)
$max_mark = 248; // marker for a (theoretical ;-)) 5-byte-char and mask for a 4-byte-char;
$html = EMPTY_STRING;
for($str_pos = 0; $str_pos < strlen($utf); $str_pos++) {
$old_chr = $utf{$str_pos};
$old_val = ord( $utf{$str_pos} );
$new_val = 0;
$utf8_marker = 0;
// skip non-utf-8-chars
if( $old_val > 127 ) {
$mark = $max_mark;
for($byte_ctr = $max_count; $byte_ctr > 2; $byte_ctr--) {
// actual byte is utf-8-marker?
if( ( $old_val & $mark ) == ( ($mark << 1) & 255 ) ) {
$utf8_marker = $byte_ctr - 1;
break;
}
$mark = ($mark << 1) & 255;
}
}
// marker found: collect following bytes
if($utf8_marker > 1 and isset( $utf{$str_pos + 1} ) ) {
$str_off = 0;
$new_val = $old_val & (127 >> $utf8_marker);
for($byte_ctr = $utf8_marker; $byte_ctr > 1; $byte_ctr--) {
// check if following chars are UTF8 additional data blocks
// UTF8 and ord() > 127
if( (ord($utf{$str_pos + 1}) & 192) == 128 ) {
$new_val = $new_val << 6;
$str_off++;
// no need for Addition, bitwise OR is sufficient
// 63: more UTF8-bytes; 0011 1111
$new_val = $new_val | ( ord( $utf{$str_pos + $str_off} ) & 63 );
}
// no UTF8, but ord() > 127
// nevertheless convert first char to NCE
else {
$new_val = $old_val;
}
}
// build NCE-Code
$html .= '&#'.$new_val.';';
// Skip additional UTF-8-Bytes
$str_pos = $str_pos + $str_off;
}
else {
$html .= chr($old_val);
$new_val = $old_val;
}
}
return($html);
}
?>
----
Manual Page -- http://www.php.net/manual/en/function.imagettftext.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+57416
Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+57416&report=yes&reason=added+to+the+manual
Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+57416&report=yes&reason=bad+code
Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+57416&report=yes&reason=spam
Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+57416&report=yes&reason=useless
Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+57416&report=yes&reason=non-english
Delete: already in docs -- http://master.php.net/manage/user-notes.php?action=delete+57416&report=yes&reason=already+in+docs
Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+57416&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+57416&report=yes
Search -- http://master.php.net/manage/user-notes.php