标签: mb-convert-encoding

如何用PHP将"Western(Mac OS Roman)"格式化文本转换为UTF-8?

我有文件由Excel for Mac 2011 VBA在Western(Mac OS Roman)导出,如下所示:

替代文字

我没有成功地将Excel for Mac VBA直接导出到UTF-8,所以我想在将它们保存到MySQL之前用PHP转换这些文件,我正在使用这个命令:

$dataset[$k] = mb_convert_encoding($line, 'ASCII', 'UTF-8'); //not correctly converted
$dataset[$k] = mb_convert_encoding($line, 'ISO-8859-8', 'UTF-8'); //not correctly converted
$dataset[$k] = mb_convert_encoding($line, 'macintosh', 'UTF-8'); //unrecognized name
$dataset[$k] = mb_convert_encoding($line, 'Windows-1251', 'UTF-8'); //changes "schön" to "sch?n"
$dataset[$k] = mb_convert_encoding($line, 'Windows-1252', 'UTF-8'); //changes "schön" to "schšn"
Run Code Online (Sandbox Code Playgroud)

我从2008年找到了这个有效编码格式列表,但它们似乎都没有代表Western (Mac OS Roman).

* UCS-4
* UCS-4BE
* UCS-4LE
* UCS-2
* UCS-2BE
* UCS-2LE
* UTF-32
* UTF-32BE …
Run Code Online (Sandbox Code Playgroud)

php macos utf-8 mb-convert-encoding

8
推荐指数
1
解决办法
1万
查看次数

如何规范化编码名称,如ks_c_5601-1987到CP949?

我从邮件服务器获取电子邮件并将邮件转换为UTF-8字符集并将其保存在DB中.要转换字符集我使用mb_convert_encoding但它无法转换 gb2312ks_c_5601-1987.在谷歌搜索我发现,而不是gb2312我可以使用CP936ks_c_5601-1987使用CP949.

按照上面的方法,它意味着在我的代码中维护一个单独的charset映射列表.有没有办法将编码名称规范化为PHP内部支持的名称,从而无需在本地维护任何映射?

php utf-8 mb-convert-encoding

7
推荐指数
1
解决办法
2157
查看次数

如何保留中文或其他外语而不是将它们转换为代码?

DOMDocument 似乎将中文字符转换为代码,例如,

你的乱发将成为ä½ çš„ä¹±å‘

如何保留中文或其他外语,而不是将其转换为代码?

以下是我的简单测试,

$dom = new DOMDocument();
$dom->loadHTML($html);
Run Code Online (Sandbox Code Playgroud)

如果我在loadHTML()之前添加以下内容,

$html = mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8"); 
Run Code Online (Sandbox Code Playgroud)

我明白了

你的乱发
Run Code Online (Sandbox Code Playgroud)

即使隐蔽的代码将显示为汉字,你的乱发仍然不是????我追求的......

php cjk domdocument mb-convert-encoding

4
推荐指数
1
解决办法
2607
查看次数

Windows-1252 的 mb_detect_encoding 出现意外结果

我读过维基百科关于Windows-1252字符编码的文章。对于字节值<128的字符,它应该与ASCII/UTF-8相同。

这是有道理的:

php -r "var_export(mb_detect_encoding(\"\x92\", 'windows-1252', true));" 'Windows-1252'

正确检测到左弯撇号。

php -r "var_export(mb_detect_encoding(\"a\", 'windows-1252', true));" false

啊?字母“a”不是Windows-1252吗?

我运行此程序的终端设置为 UTF-8。因此,这应该与字母“a”的 ASCII 字节序列相同。为了最小化变量,如果我指定正确的 Windows-1252字节序列:

php -r "var_export(mb_detect_encoding(\"\x61\", 'windows-1252', true));" false

在这些情况下,更改“strict”参数(其文档非常无用)没有任何作用。

php utf-8 character-encoding mb-convert-encoding

3
推荐指数
1
解决办法
1496
查看次数

将 html 实体转换为 UTF-8,但保留现有的 UTF-8

我想将 html 实体转换为 UTF-8,但mb_convert_encoding会破坏已经 UTF-8 编码的字符。正确的方法是什么?

$text = "äöü &auml; &ouml; &uuml; &#223;";
var_dump(mb_convert_encoding($text, 'UTF-8', 'HTML-ENTITIES'));
// string(24) "äöü ä ö ü ß"
Run Code Online (Sandbox Code Playgroud)

php utf-8 html-entities mb-convert-encoding

2
推荐指数
1
解决办法
3600
查看次数

PHP:检查字符串是utf-8还是utf-16le

我正在编写默认返回 utf-8 格式文档的函数,如果您提供特殊参数,它将返回 utf-16le 格式的内容。我开始为这个函数编写单元测试,我不明白的是如何检查编码是“utf-8”还是“utf-16le”。我已经尝试过mb_detect_encoding,但即使在这段代码片段中它也会返回false

  $utf16Doc = mb_convert_encoding($doc, "utf-16le", "utf8");
  $test = mb_detect_encoding($utf16Doc, "utf-16le");
  var_dump($test);
Run Code Online (Sandbox Code Playgroud)

感谢任何如何在测试中检查编码是 utf-16le 而不是 utf-8 的想法。

php utf-8 utf-16le mb-convert-encoding

1
推荐指数
1
解决办法
2611
查看次数

字符串末尾带有破折号不允许json_encode

我正在尝试使用substr($originalText,0,250); 从字符串中提取n个字符 ;

第n个字符是一个破折号。因此,当我在记事本中查看时,最后一个字符为–。在我的编辑器Brackets中,我什至无法打开日志文件,因为它仅支持UTF-8编码。

我也无法在此字符串上运行json_encode。

但是,当我使用时substr($originalText,0,251),它可以正常工作。我可以打开日志文件,它显示一个破折号而不是â€。json_encode也可以正常工作。

我可以使用它mb_convert_encoding($mystring, "UTF-8", "Windows-1252")来规避问题,但是谁能告诉我为什么最后加上这些字符会导致错误?此外,在执行此操作时,我的日志文件在方括号中显示“ –”,这也令人困惑。

我的问题是,为什么在字符串的末尾加上破折号,而不是在其他任何地方(后跟其他字符)。

希望我的问题很清楚,否则我可以尝试进一步解释。

谢谢。

php json utf-8 mb-convert-encoding

0
推荐指数
1
解决办法
173
查看次数