我想将其转换hello@domain.com为
hello@domain.com
hello@domain.com
我努力了:
url_encode($string)
这提供了我输入的相同字符串,并以@符号转换为 %40
%40
还尝试了:
htmlentities($string)
这样就提供了相同的字符串。
我正在使用UTF8字符集。不知道这是否有所不同…。
它就来了(假设使用UTF-8,但是更改起来很简单):
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; }
编辑 推荐的替代使用unpack:
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); }