note 57167 added to function.html-entity-decode

From: Date: Mon, 26 Sep 2005 00:22:32 +0000
Subject: note 57167 added to function.html-entity-decode
Groups: php.notes 
Request: Send a blank email to php-notes+get-95777@lists.php.net to get a copy of this message
I've been using the great replace_num_entity function posted below. But there seems to be some problems with the 128 to 160 characters range. Ie, try: <?php header("Content-type: text/html; charset=utf-8"); ?> <html><body> <?php for($x=128; $x<161; $x++) { echo('&#' . $x . '; -- ' . preg_replace_callback('/&#([0-9a-fx]+);/mi', 'replace_num_entity', '&#' . $x . ';') . '</br>'); } ?> </body></html> I really don´t know the reason for this (since according to UTF-8 specs the function should have worked) but I did a modified version of the function to address this. Hope it helps. function replace_num_entity($ord) { $ord = $ord[1]; if (preg_match('/^x([0-9a-f]+)$/i', $ord, $match)) { $ord = hexdec($match[1]); } else { $ord = intval($ord); } $no_bytes = 0; $byte = array(); if($ord == 128) { return chr(226).chr(130).chr(172); } elseif($ord == 129) { return chr(239).chr(191).chr(189); } elseif($ord == 130) { return chr(226).chr(128).chr(154); } elseif($ord == 131) { return chr(198).chr(146); } elseif($ord == 132) { return chr(226).chr(128).chr(158); } elseif($ord == 133) { return chr(226).chr(128).chr(166); } elseif($ord == 134) { return chr(226).chr(128).chr(160); } elseif($ord == 135) { return chr(226).chr(128).chr(161); } elseif($ord == 136) { return chr(203).chr(134); } elseif($ord == 137) { return chr(226).chr(128).chr(176); } elseif($ord == 138) { return chr(197).chr(160); } elseif($ord == 139) { return chr(226).chr(128).chr(185); } elseif($ord == 140) { return chr(197).chr(146); } elseif($ord == 141) { return chr(239).chr(191).chr(189); } elseif($ord == 142) { return chr(197).chr(189); } elseif($ord == 143) { return chr(239).chr(191).chr(189); } elseif($ord == 144) { return chr(239).chr(191).chr(189); } elseif($ord == 145) { return chr(226).chr(128).chr(152); } elseif($ord == 146) { return chr(226).chr(128).chr(153); } elseif($ord == 147) { return chr(226).chr(128).chr(156); } elseif($ord == 148) { return chr(226).chr(128).chr(157); } elseif($ord == 149) { return chr(226).chr(128).chr(162); } elseif($ord == 150) { return chr(226).chr(128).chr(147); } elseif($ord == 151) { return chr(226).chr(128).chr(148); } elseif($ord == 152) { return chr(203).chr(156); } elseif($ord == 153) { return chr(226).chr(132).chr(162); } elseif($ord == 154) { return chr(197).chr(161); } elseif($ord == 155) { return chr(226).chr(128).chr(186); } elseif($ord == 156) { return chr(197).chr(147); } elseif($ord == 157) { return chr(239).chr(191).chr(189); } elseif($ord == 158) { return chr(197).chr(190); } elseif($ord == 159) { return chr(197).chr(184); } elseif($ord == 160) { return chr(194).chr(160); } if ($ord < 128) { return chr($ord); } elseif ($ord < 2048) { $no_bytes = 2; } elseif ($ord < 65536) { $no_bytes = 3; } elseif ($ord < 1114112) { $no_bytes = 4; } else { return; } switch($no_bytes) { case 2: { $prefix = array(31, 192); break; } case 3: { $prefix = array(15, 224); break; } case 4: { $prefix = array(7, 240); } } for ($i = 0; $i < $no_bytes; $i++) { $byte[$no_bytes - $i - 1] = (($ord & (63 * pow(2, 6 * $i))) / pow(2, 6 * $i)) & 63 | 128; } $byte[0] = ($byte[0] & $prefix[0]) | $prefix[1]; $ret = ''; for ($i = 0; $i < $no_bytes; $i++) { $ret .= chr($byte[$i]); } return $ret; } ---- Manual Page -- http://www.php.net/manual/en/function.html-entity-decode.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+57167 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+57167&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+57167&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+57167&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+57167&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+57167&report=yes&reason=non-english Delete: already in docs -- http://master.php.net/manage/user-notes.php?action=delete+57167&report=yes&reason=already+in+docs Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+57167&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+57167&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#95777) next »