使用 HTML-ENTITIES 字符集替代 mb_convert_encoding

问题描述 投票:0回答:3

我有以下代码:

mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8');

我需要一个替代代码,其功能完全相同,但不使用任何 mb_* 函数(mb 扩展在某些环境中不可用)。

我是这么想的

utf8_decode(htmlentities($string, ENT_COMPAT, 'utf-8'));

应该做完全相同的事情,但不幸的是它没有。

php string character-encoding
3个回答
26
投票

我玩了一下,发现这很有趣。似乎第二部分也运行“htmlspecialchars”。一定是 mb_convert_encoding 中的一些错误,因为 htmlentities 没有正确运行。

如果对结果运行 htmlspecialchars_decode,您将得到与使用 mb_convert_encoding 完全相同的结果。

代码:

$string = 'Test:!"$%&/()=ÖÄÜöäü<<';
echo mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8')."\n\n";
echo htmlspecialchars_decode(utf8_decode(htmlentities($string, ENT_COMPAT, 'utf-8', false)));

这里是上面代码的演示: http://sandbox.onlinephpfunctions.com/code/715acade3b8337d9c9e48e58deee2a237015c259

这里有一个没有 htmlspecialchars_decode 的演示,以显示您的问题: http://sandbox.onlinephpfunctions.com/code/5c4a32bf99aa8fd6246c4a77132a023d32945363


0
投票

解决方案“htmlspecialchars_decode(utf8_decode(htmlentities($string, ENT_COMPAT, 'utf-8', false)));”没有好的结果,这里有另一个解决方案:

    $string = 'Test:!"$%&/()=ÖÄÜöäü<<accentué За матеріалами';
    echo mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8')."\n\n";
    echo mb_encode_numericentity(
        htmlspecialchars_decode(
            htmlentities($string, ENT_NOQUOTES, 'UTF-8', false)
            ,ENT_NOQUOTES
        ), [0x80, 0x10FFFF, 0, ~0],
        'UTF-8'
    );

这里有一个演示: https://onlinephp.io/c/0a300


0
投票

我能够得到与@Green Black相同的结果,但语法更简单:

htmlspecialchars_decode(htmlentities($string))

扩展@Green Black 的示例:


$string = 'Test:!"$%&/()=ÖÄÜöäü<<';

$test1 = mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8');

$test2 = htmlspecialchars_decode(utf8_decode(htmlentities($string, ENT_COMPAT, 'utf-8', false)));

$test3 = htmlspecialchars_decode(htmlentities($string));

echo "\n\n$test1";
echo "\n\n$test2";
echo "\n\n$test3";

if ($test1 == $test2 && $test1 == $test3) {
    echo "\n\n✅ All versions match!";
};


在线演示:https://onlinephp.io/c/3d435

© www.soinside.com 2019 - 2024. All rights reserved.