PHP |波兰语字符-将UTF-8转换为ANSI

时间:2018-11-23 14:50:50

标签: php encoding utf-8 ansi

我试图将字符串UTF-8转换为ANSI(Windows-1252)。

以下是我的代码的一些示例:

https://3v4l.org/MDcIj

它们中的任何一个都不起作用,并且波兰语字符带有问号或diamonts:/

目前唯一的解决方案是以下库:CkCharset Converter,但我不想使用这么大的库来保存一个文件。

对于这个问题的帮助,我将不胜感激。

带有脚本的文件具有类似UTF-8的标头:

header('Content-Type: text/html; charset=utf-8');

3 个答案:

答案 0 :(得分:0)

如果用ANSI表示仅支持英文字母A-Z的原始ASCII编码,则可以将iconv与translit选项一起使用:

php > $txt = "[ 'ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ż' , 'ź', 'Ą', 'Ć', 'Ę', 'Ł', 'Ń', 'Ó', 'Ś', 'Ż', 'Ź']";
php > echo iconv('utf8', 'ascii//translit', $txt);
[ 'a', 'c', 'e', 'l', 'n', 'o', 's', 'z' , 'z', 'A', 'C', 'E', 'L', 'N', 'O', 'S', 'Z', 'Z']

如果您的意思是Windows code page 1250,请使用:

iconv('utf8', 'windows-1250', $txt);

如果您的意思是DOS code page 852,请使用:

iconv('utf8', 'cp852', $txt);

您应该检查计费程序需要哪种编码。如果它是80年代的DOS程序,则可能是cp852,但是如果它是90年代的Windows程序,则可能是Windows-1250。

答案 1 :(得分:0)

我认为您应该对字符串进行音译:将非拉丁字符替换为相应的拉丁字母-ascii字符。据我所知,最可靠的解决方案是使用 intl 模块中的\ Transliterator。

它适用于多种语言,包括波兰语,西里尔字母或中文符号。我想提醒您,其他语言的手动替换波兰语符号将失败。

我认为这段代码应该对您有用:

$rule = ':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;';

$latinString = \Transliterator::createFromRules($rule, \Transliterator::FORWARD)
        ->transliterate($maybePolishString);

您可以在INTL文档页面上找到更多信息:https://secure.php.net/manual/en/book.intl.php

答案 2 :(得分:0)

谢谢大家的帮助。

iconv('UTF-8', 'Windows-1250//IGNORE', $result)

没有// IGNORE参数函数返回通知错误

Notice: iconv(): Detected an illegal character in input string

但这很好用:)