【问题标题】:Convert (doublebyte) string to Hex将(双字节)字符串转换为十六进制
【发布时间】:2011-10-24 07:04:02
【问题描述】:

假设我有用西里尔字母写的“俄语”这个词。这相当于十六进制中的以下内容:

Русский

我的问题是:如何编写一个函数,从西里尔文的“俄语”转换为上面的十六进制值?同样的功能是否也适用于单字节字符?

【问题讨论】:

  • 您在寻找htmlspecialchars()吗?
  • 这不会转换每个字母,只转换适用的特殊字符。
  • @brad, @alien: 使用 htmlentities() 应该转换大多数字符
  • 不适用于 cryllic:echo htmlentities('русский'); // outputs руÑÑкий
  • htmlentities 什么都不转换,use mb_encode_numericentity

标签: php utf-8 double-byte


【解决方案1】:

〹 事物被称为 HTML 实体。在 PHP 中有一个函数可以创建这些:mb_encode_numericentityDocs,它是 Multibyte String 扩展 (Demo) 的一部分:

$cyrillic = 'русский';

$encoding = 'UTF-8';
$convmap = array(0, 0xffff, 0, 0xffff);
$encoded = mb_encode_numericentity($cyrillic, $convmap, $encoding);

echo $encoded; # русский

但是:您需要知道西里尔字符串的编码。在这种情况下我选择了UTF-8,根据它你需要修改函数的$encoding参数和$convmap数组。

【讨论】:

    【解决方案2】:

    您提供的示例不是十六进制,但如果您想转换为十六进制,请尝试以下操作:

    function strToHex($string)
    {
        $hex='';
        for ($i=0; $i < strlen($string); $i++)
        {
            $hex .= dechex(ord($string[$i]));
        }
        return $hex;
    }
    
    function hexToStr($hex)
    {
        $string='';
        for ($i=0; $i < strlen($hex)-1; $i+=2)
        {
            $string .= chr(hexdec($hex[$i].$hex[$i+1]));
        }
        return $string;
    }
    
    echo strToHex('русский'); // d180d183d181d181d0bad0b8d0b9
    

    【讨论】:

    • 一个注释 - 控制字符(例如 \n)会导致问题,因此您需要通过更改“ dechex(ord($string[$i])) ”位来填充它们到 strToHex() 调用中的“ str_pad(dechex(ord($string[$i])), 2, "0", STR_PAD_LEFT) "。但总体而言,这是一个很棒的答案 - 非常感谢 非常 :-)
    猜你喜欢
    • 2023-03-07
    • 2022-06-18
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2018-01-31
    • 1970-01-01
    • 2014-03-10
    相关资源
    最近更新 更多