note 76408 deleted from function.html-entity-decode by danbrown
| From: | danbrown@php.net | Date: | Tue, 10 Jan 2012 20:12:34 +0000 |
| Subject: | note 76408 deleted from function.html-entity-decode by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-185533@lists.php.net to get a copy of this message | ||
Note Submitter: akniep at rayo dot info
----
In answer to "laurynas dot butkus at gmail dot com" and "romans@void.lv" and
their great code2utf-function I added the functionality for entries between [128, 160[ that are not
ASCii, but equal for all major western encodings like ISO8859-X and UTF-8 that has been mentioned
before.
Now, the following function should in fact convert any number (table-entry) into an UTF-8-character.
Thus, the return-value code2utf( <number> ) equals the character that is represented by the
XML-entity &#<number>; (exceptions: #129, #141, #143, #144, #157).
To give an example, the function may be useful for creating a UTF-8-compatible
html_entity_decode-function or determining the entry-position of UTF-8-characters in order to find
the correct entity-replacement or similar.
function code2utf($number)
{
if ($number < 0)
return FALSE;
if ($number < 128)
return chr($number);
// Removing / Replacing Windows Illegals Characters
if ($number < 160)
{
if ($number==128) $number=8364;
elseif ($number==129) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped
to the saved-space #160
elseif ($number==130) $number=8218;
elseif ($number==131) $number=402;
elseif ($number==132) $number=8222;
elseif ($number==133) $number=8230;
elseif ($number==134) $number=8224;
elseif ($number==135) $number=8225;
elseif ($number==136) $number=710;
elseif ($number==137) $number=8240;
elseif ($number==138) $number=352;
elseif ($number==139) $number=8249;
elseif ($number==140) $number=338;
elseif ($number==141) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped
to the saved-space #160
elseif ($number==142) $number=381;
elseif ($number==143) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped
to the saved-space #160
elseif ($number==144) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped
to the saved-space #160
elseif ($number==145) $number=8216;
elseif ($number==146) $number=8217;
elseif ($number==147) $number=8220;
elseif ($number==148) $number=8221;
elseif ($number==149) $number=8226;
elseif ($number==150) $number=8211;
elseif ($number==151) $number=8212;
elseif ($number==152) $number=732;
elseif ($number==153) $number=8482;
elseif ($number==154) $number=353;
elseif ($number==155) $number=8250;
elseif ($number==156) $number=339;
elseif ($number==157) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped
to the saved-space #160
elseif ($number==158) $number=382;
elseif ($number==159) $number=376;
} //if
if ($number < 2048)
return chr(($number >> 6) + 192) . chr(($number & 63) + 128);
if ($number < 65536)
return chr(($number >> 12) + 224) . chr((($number >> 6) & 63) + 128) .
chr(($number & 63) + 128);
if ($number < 2097152)
return chr(($number >> 18) + 240) . chr((($number >> 12) & 63) + 128) .
chr((($number >> 6) & 63) + 128) . chr(($number & 63) + 128);
return FALSE;
} //code2utf()