【发布时间】:2020-01-20 15:41:35
【问题描述】:
我们正在做一个项目,我们必须模仿旧遗留系统的一些导出输出。
这些导出是基于文本的,并以 WINDOWS-1252 编码进行编码,其中特殊字符应以十进制/数字表示形式进行编码,例如α 应该是 α。
我尝试使用htmlspecialchars、htmlentities 和mb_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 中。
-
> 我很好奇是否有更清洁的方式——投票转至codereview.stackexchange.com
标签: php string unicode windows-1252