note 47146 deleted from function.utf8-decode by cmb

From: Date: Sun, 11 Dec 2016 11:35:45 +0000
Subject: note 47146 deleted from function.utf8-decode by cmb
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-208539@lists.php.net to get a copy of this message
Note Submitter: dobersch at gmx dot net ---- Sorry, there's an error in my previous comment, my error_reporting was not set to E_ALL ... so the notices disappeared... It seems that those Google URLs are not only UTF-8 encoded, but after encoding, several values also get replaced. (cp1252 ?) Just the way as described in following comments on the utf8_encode() page: http://de3.php.net/manual/de/function.utf8-encode.php#44843 and http://de3.php.net/manual/de/function.utf8-encode.php#45226 Below I post a solution for getting back the ISO-8859-1 encoded string from the encoded data, by turning the function from Aidan the other way around. hope this time, everything is alright... <?PHP ini_set('error_reporting', E_ALL); // map taken from http://de3.php.net/manual/de/function.utf8-encode.php#45226 $cp1252_map = array( "\xc2\x80" => "\xe2\x82\xac", /* EURO SIGN */ "\xc2\x82" => "\xe2\x80\x9a", /* SINGLE LOW-9 QUOTATION MARK */ "\xc2\x83" => "\xc6\x92", /* LATIN SMALL LETTER F WITH HOOK */ "\xc2\x84" => "\xe2\x80\x9e", /* DOUBLE LOW-9 QUOTATION MARK */ "\xc2\x85" => "\xe2\x80\xa6", /* HORIZONTAL ELLIPSIS */ "\xc2\x86" => "\xe2\x80\xa0", /* DAGGER */ "\xc2\x87" => "\xe2\x80\xa1", /* DOUBLE DAGGER */ "\xc2\x88" => "\xcb\x86", /* MODIFIER LETTER CIRCUMFLEX ACCENT */ "\xc2\x89" => "\xe2\x80\xb0", /* PER MILLE SIGN */ "\xc2\x8a" => "\xc5\xa0", /* LATIN CAPITAL LETTER S WITH CARON */ "\xc2\x8b" => "\xe2\x80\xb9", /* SINGLE LEFT-POINTING ANGLE QUOTATION */ "\xc2\x8c" => "\xc5\x92", /* LATIN CAPITAL LIGATURE OE */ "\xc2\x8e" => "\xc5\xbd", /* LATIN CAPITAL LETTER Z WITH CARON */ "\xc2\x91" => "\xe2\x80\x98", /* LEFT SINGLE QUOTATION MARK */ "\xc2\x92" => "\xe2\x80\x99", /* RIGHT SINGLE QUOTATION MARK */ "\xc2\x93" => "\xe2\x80\x9c", /* LEFT DOUBLE QUOTATION MARK */ "\xc2\x94" => "\xe2\x80\x9d", /* RIGHT DOUBLE QUOTATION MARK */ "\xc2\x95" => "\xe2\x80\xa2", /* BULLET */ "\xc2\x96" => "\xe2\x80\x93", /* EN DASH */ "\xc2\x97" => "\xe2\x80\x94", /* EM DASH */ "\xc2\x98" => "\xcb\x9c", /* SMALL TILDE */ "\xc2\x99" => "\xe2\x84\xa2", /* TRADE MARK SIGN */ "\xc2\x9a" => "\xc5\xa1", /* LATIN SMALL LETTER S WITH CARON */ "\xc2\x9b" => "\xe2\x80\xba", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/ "\xc2\x9c" => "\xc5\x93", /* LATIN SMALL LIGATURE OE */ "\xc2\x9e" => "\xc5\xbe", /* LATIN SMALL LETTER Z WITH CARON */ "\xc2\x9f" => "\xc5\xb8" /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/ ); // I find this name a little misleading because the result won't be valid UTF8 data function cp1252_to_utf8($str) { global $cp1252_map; return strtr(utf8_encode($str), $cp1252_map); } function cp1252_utf8_to_iso($str) { // the other way around... global $cp1252_map; return utf8_decode( strtr($str, array_flip($cp1252_map)) ); } $euro = "\xe2\x82\xac"; // "google encoded" euro sign $str = cp1252_utf8_to_iso($euro); for($i=0; $i<strlen($str); $i++) { print '&quot;' . $str[$i] . '&quot; - ' . ord($str[$i]) . ' (decimal)<br />'; } ?>

« previous php.notes (#208539) next »