utf8_decode utf8 htmlentities especiales convertir caracteres php string utf-8 encode html-entities

htmlentities - utf8_decode php



Cómo convertir todos los caracteres a su equivalente de entidad html usando PHP (3)

Aquí va (se supone UTF-8, pero es trivial cambiar):

function encode($str) { $str = mb_convert_encoding($str , ''UTF-32'', ''UTF-8''); //big endian $split = str_split($str, 4); $res = ""; foreach ($split as $c) { $cur = 0; for ($i = 0; $i < 4; $i++) { $cur |= ord($c[$i]) << (8*(3 - $i)); } $res .= "&#" . $cur . ";"; } return $res; }

EDITAR Alternativa recomendada usando unpack :

function encode2($str) { $str = mb_convert_encoding($str , ''UTF-32'', ''UTF-8''); $t = unpack("N*", $str); $t = array_map(function($n) { return "&#$n;"; }, $t); return implode("", $t); }

Quiero convertir este [email protected] a

&#104;&#101;&#108;&#108;&#111;&#064;&#100;&#111;&#109;&#097;&#105;&#110;&#046;&#099;&#111;&#109;

Yo he tratado:

url_encode($string)

esto proporciona la misma cadena que ingresé, devuelta con el símbolo @ convertido a %40

también intenté:

htmlentities($string)

esto proporciona la misma cadena de vuelta.

Estoy usando un juego de caracteres UTF8. no estoy seguro de si esto hace la diferencia ...


Una manera mucho más fácil de hacer esto:

function convertToNumericEntities($string) { $convmap = array(0x80, 0x10ffff, 0, 0xffffff); return mb_encode_numericentity($string, $convmap, "UTF-8"); }

Puedes cambiar la codificación si estás usando algo diferente.

  • Rango de mapa fijo. Gracias a Artefacto.

function uniord($char) { $k=mb_convert_encoding($char , ''UTF-32'', ''UTF-8''); $k1=ord(substr($k,0,1)); $k2=ord(substr($k,1,1)); $value=(string)($k2*256+$k1); return $value; }

la función anterior funciona para 1 carácter pero si tienes una cadena puedes hacer esto

$string="anytext"; $arr=preg_split(//u,$string,-1,PREG_SPLIT_NO_EMPTY); $temp=" "; foreach($arr as $v){ $temp="&#".uniord($v);//prints the equivalent html entity of string }