首页 > 解决方案 > PHP:将字符转换为其(十进制)数字表示(在字符串中)

问题描述

我们正在做一个项目,我们必须模仿旧遗留系统的一些导出输出。

这些导出是基于文本的,并以 WINDOWS-1252 编码进行编码,其中特殊字符应以十进制/数字表示进行编码,例如α应该是α.

我尝试使用htmlspecialchars,htmlentitiesmb_convert_encoding- 不幸的是没有运气。

目前我正在遍历字符串的每个字符并检查它是否是 ASCII 字符。如果字符不是有效的 ASCII,我将使用 将其转换为十进制表示mb_ord,请参阅我的函数:

private function transformString(string $str)
    {
        if (mb_check_encoding($str, 'ASCII') === true) {
            return $str;
        } else {
            $characters = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
            $transformedString = '';
            foreach ($characters as $character) {
                if (mb_check_encoding($character, 'ASCII') === false) {
                    $character = sprintf('&#%s;', mb_ord($character));
                }
                $transformedString .= $character;
            }
            return $transformedString;
        }
    }

这个解决方案似乎有效,但我很好奇这种转换是否有更清洁的方法?

提前致谢!

标签: phpstringunicodewindows-1252

解决方案


该函数使用 preg_replace_callback() 替换所有非 ASCII 字符。

function encodeNonAscii($string){
  return preg_replace_callback('/[^\x00-\x7F]/u', 
    function($match){
      return '&#'.mb_ord($match[0]).';';
    },
    $string
  );
}

只有一点点更短和更快。


推荐阅读