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
hello@domain.com
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
}