Skip to content
Browse files

fix for MDL-13174 : replace calls to html_entity_decode() with hotpot…

…_charcode_to_utf8() because html_entity_decode is broken in PHP 4
  • Loading branch information...
1 parent 59d4af4 commit 162e13cc89b9f16262a1edd45d3b3943922a9b95 gbateson committed Jan 31, 2008
Showing with 23 additions and 1 deletion.
  1. +23 −1 question/format/hotpot/format.php
View
24 question/format/hotpot/format.php
@@ -502,7 +502,8 @@ function hotpot_get_reading(&$xml) {
}
function hotpot_prepare_str($str) {
// convert html entities to unicode and add slashes
- $str = preg_replace('/&#[x0-9A-F]+;/ie', "html_entity_decode('\\0',ENT_NOQUOTES,'UTF-8')", $str);
+ $str = preg_replace('/&#x([0-9a-f]+);/ie', "hotpot_charcode_to_utf8(hexdec('\\1'))", $str);
+ $str = preg_replace('/&#([0-9]+);/e', "hotpot_charcode_to_utf8(\\1)", $str);
return addslashes($str);
}
} // end class
@@ -609,6 +610,27 @@ function encode_cdata(&$str, $tag) {
}
}
+function hotpot_charcode_to_utf8($charcode) {
+ if ($charcode <= 0x7F) {
+ // ascii char (roman alphabet + punctuation)
+ return chr($charcode);
+ }
+ if ($charcode <= 0x7FF) {
+ // 2-byte char
+ return chr(($charcode >> 0x06) + 0xC0).chr(($charcode & 0x3F) + 128);
+ }
+ if ($charcode <= 0xFFFF) {
+ // 3-byte char
+ return chr(($charcode >> 0x0C) + 0xE0).chr((($charcode >> 0x06) & 0x3F) + 0x80).chr(($charcode & 0x3F) + 0x80);
+ }
+ if ($charcode <= 0x1FFFFF) {
+ // 4-byte char
+ return chr(($charcode >> 0x12) + 0xF0).chr((($charcode >> 0x0C) & 0x3F) + 0x80).chr((($charcode >> 0x06) & 0x3F) + 0x80).chr(($charcode & 0x3F) + 0x80);
+ }
+ // unidentified char code !!
+ return ' ';
+}
+
function hotpot_utf8_to_html_entity($char) {
// http://www.zend.com/codex.php?id=835&single=1

0 comments on commit 162e13c

Please sign in to comment.
Something went wrong with that request. Please try again.