PHP:将字符转换为它们的(十进制)数值表示(在字符串中)。

3
我们正在开展一个项目,需要模仿一个旧的遗留系统的一些导出输出。这些导出是基于文本的,并采用WINDOWS-1252编码,其中特殊字符应该以十进制/数字表示进行编码,例如:α 应该被编码为 α
我尝试使用htmlspecialcharshtmlentitiesmb_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;
        }
    }

这个解决方案似乎可行,但我很好奇是否有更简洁的转换方法?
先谢谢了!

你的任务描述存在问题。α 不属于 Windows-1252,但它在 cp437 中。 - daxim
我很好奇是否有更简洁的方法 - 投票移动到https://codereview.stackexchange.com - daxim
1个回答

0

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

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

只是稍微短一点,速度也更快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接