note 91956 added to function.htmlentities

From: Date: Thu, 02 Jul 2009 19:11:37 +0000
Subject: note 91956 added to function.htmlentities
Groups: php.notes 
Request: Send a blank email to php-notes+get-157840@lists.php.net to get a copy of this message
<?php //simple task: convert everything from utf-8 into an NCR[numeric character reference] class unicode_replace_entities { public function UTF8entities($content="") { $contents = $this->unicode_string_to_array($content); $swap = ""; $iCount = count($contents); for ($o=0;$o<$iCount;$o++) { $contents[$o] = $this->unicode_entity_replace($contents[$o]); $swap .= $contents[$o]; } return mb_convert_encoding($swap,"UTF-8"); //not really necessary, but why not. } public function unicode_string_to_array( $string ) { //taken from mb_split page...adjwilli $strlen = mb_strlen($string); while ($strlen) { $array[] = mb_substr( $string, 0, 1, "UTF-8" ); $string = mb_substr( $string, 1, $strlen, "UTF-8" ); $strlen = mb_strlen( $string ); } return $array; } //reworked slightly from Miguel Perez post on ord page public function unicode_entity_replace($c) { $h = ord($c{0}); if ($h <= 0x7F) { return $c; } else if ($h < 0xC2) { return $c; } if ($h <= 0xDF) { $h = ($h & 0x1F) << 6 | (ord($c{1}) & 0x3F); $h = "&#" . $h . ";"; return $h; } else if ($h <= 0xEF) { $h = ($h & 0x0F) << 12 | (ord($c{1}) & 0x3F) << 6 | (ord($c{2}) & 0x3F); $h = "&#" . $h . ";"; return $h; } else if ($h <= 0xF4) { $h = ($h & 0x0F) << 18 | (ord($c{1}) & 0x3F) << 12 | (ord($c{2}) & 0x3F) << 6 | (ord($c{3}) & 0x3F); $h = "&#" . $h . ";"; return $h; } } }// //utf-8 environment $content = "<strong>baño baño baño</strong>日本語 = nihongo da ze.<br />"; //test various approaches to maintaining characters... $result = htmlentities($content); echo "htmlentities: ugh, not really what we're looking for:"; echo $result; //FAIL $result = htmlentities($content,ENT_QUOTES, "UTF-8"); echo "<br /><br />"; echo "htmlentities UTF-8: not even close:"; echo $result; //FAIL $result = htmlspecialchars($content); echo "<br /><br />"; echo "htmlspecialcharacters: nope:"; echo $result; //FAIL //mb convert encoding doesn't connect entities at all so that definitely won't work. //what I want is for the characters to be maintained regardless of what the user enters... $oUnicodeReplace = new unicode_replace_entities(); $content = $oUnicodeReplace->UTF8entities($content); echo "<br /><br />unicode_replace_entities: this will work:<br /><br />"; echo $content; echo "<br /><br />Hmmmn, Entities get replaced with 'literals' in textarea FF3<br /><br />"; echo "<textarea style='width:300px;height:150px;'>"; echo $content; //still can't really submit this into the db like this echo "</textarea>"; //for editing NCR's in a textarea echo "<br /><br />"; echo "hack to maintain NCR's in textarea<br />"; echo "<textarea style='width:300px;height:150px;'>"; echo preg_replace("/(&#)+/","&amp;#",$content); echo "</textarea>"; ---- Server IP: 209.41.74.194 Probable Submitter: 76.14.99.95 ---- Manual Page -- http://www.php.net/manual/en/function.htmlentities.php Edit -- https://master.php.net/note/edit/91956 Del: integrated -- https://master.php.net/note/delete/91956/integrated Del: useless -- https://master.php.net/note/delete/91956/useless Del: bad code -- https://master.php.net/note/delete/91956/bad+code Del: spam -- https://master.php.net/note/delete/91956/spam Del: non-english -- https://master.php.net/note/delete/91956/non-english Del: in docs -- https://master.php.net/note/delete/91956/in+docs Del: other reasons-- https://master.php.net/note/delete/91956 Reject -- https://master.php.net/note/reject/91956 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#157840) next »