php - 在 PHP 中检测正确的字符编码?

标签 php character-encoding detection multibyte

我正在尝试检测字符串的字符编码,但无法得到正确的结果。
例如:

$str = "€ ‚ ƒ „ …" ;
$str = mb_convert_encoding($str, 'Windows-1252' ,'HTML-ENTITIES') ;
// Now $str should be a Windows-1252-encoded string.
// Let's detect its encoding:
echo mb_detect_encoding($str,'Windows-1252, ISO-8859-1, UTF-8') ;

该代码输出 ISO-8859-1 但它应该是 Windows-1252

这是怎么回事?

编辑:
更新示例,以响应 @raina77ow。

$str = "€‚ƒ„…" ; // no white-spaces
$str = mb_convert_encoding($str, 'Windows-1252' ,'HTML-ENTITIES') ;
$str = "Hello $str" ; // let's add some ascii characters
echo mb_detect_encoding($str,'Windows-1252, ISO-8859-1, UTF-8') ;

我又得到了错误的结果。

最佳答案

PHP 中 Windows-1252 的问题是它几乎永远不会被检测到,因为一旦您的文本包含 0x80 到 0x9f 之外的任何字符,它就不会被检测为 Windows- 1252.

这意味着如果您的字符串包含一个普通的 ASCII 字母,例如“A”,甚至是一个空格字符,PHP 会说这是无效的 Windows-1252,并且在您的情况下,会回退到下一个可能的编码,这是 ISO 8859-1。这是一个 PHP 错误,请参阅 https://bugs.php.net/bug.php?id=64667 .

关于php - 在 PHP 中检测正确的字符编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15844295/

相关文章:

javascript - fetch 不发送自动填充的输入

php - PHP插入查询问题(外键)

c# - c#中的基频+语音检测

javascript - 如何检测 Safari 上的页面是否是从跳板打开的?

iphone - 检测 iOS 应用的 AppStore 安装

php - jaxl 返回调用它的函数

php - 多张图片上传并调整图片大小 : SECURITY

c# - wcf + 响应消息的内容类型text/html与绑定(bind)的内容类型不匹配(application/soap+xml; charset=utf-8)

character-encoding - 什么字符编码使用 2 个下划线和一个字母?

php - AJAX 请求不发送阿拉伯字符