如何使用PHP将所有字符转换为其html实体等价物

如何使用PHP将所有字符转换为其html实体等价物,php,string,utf-8,encode,html-entities,Php,String,Utf 8,Encode,Html Entities,我想转换这个hello@domain.com到 hello@domain.com 我试过: url_encode($string) 这提供了我输入的相同字符串,返回时@符号转换为%40 还尝试: htmlen

我想转换这个
hello@domain.com

hello@domain.com
我试过:

url_encode($string)
这提供了我输入的相同字符串,返回时@符号转换为
%40

还尝试:

htmlentities($string)
这将在右后提供相同的字符串

我使用的是UTF8字符集。不确定这是否会带来不同

就这样(假设为UTF-8,但更改起来很简单):


更简单的方法是:

function convertToNumericEntities($string) {
    $convmap = array(0x80, 0x10ffff, 0, 0xffffff);
    return mb_encode_numericentity($string, $convmap, "UTF-8");
}
如果使用不同的编码,则可以更改编码

  • 固定地图范围。多亏了人工制品
上面的函数适用于1个字符,但是如果您有一个字符串,您可以这样做

$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

}

我删除了我的答案,因为我意识到这是不好的。(感谢Artefactor)然而,这并不能完全防止垃圾邮件机器人……我知道这并不是万无一失的,但是我在过去使用这一功能时取得了很好的效果,使用在线服务对我的电子邮件地址进行编码。我现在正在尝试将其构建到我正在构建的CMS中。在
$res.=“&#”中转换为字符串时,不必将$cur打印为未签名$cur。";";'encoded_str'
,然后使用一个函数执行闭包所做的操作:
函数encoded_str($n){return“&#$n;”}
。不太优雅,但向后兼容。Artefactor,您能将其转换回原始字符串吗?“带背包?”回答得很好。这对我也有帮助。谢谢。很好,我还没有测试过,但我想你还必须更改映射以覆盖所有unicode字符。可能类似于
$convmap=array(0x000000,0x10ffff,0,0xffffff)(未测试)此注释中的convmap有效:此答案非常简单,适用于我的应用程序。为了回答这个问题,
$convmap
应该包括普通的字母数字字符,但不包括空格或行框,所以
$convmap=array(0x21,0x10ffff,0,0xffffff,)可能更适用。通过
html\u entity\u decode
函数调用传递字符串也可能是有益的,以防止实体的意外双重编码。出于某种原因,此解决方案仅输出非编码字符@Artefactor的答案很好用。
function convertToNumericEntities($string) {
    $convmap = array(0x80, 0x10ffff, 0, 0xffffff);
    return mb_encode_numericentity($string, $convmap, "UTF-8");
}
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;

}
$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

}