Php 检查字符串是UTF-8还是UCS-2

Php 检查字符串是UTF-8还是UCS-2,php,utf-8,ucs2,Php,Utf 8,Ucs2,如果我有一个数据列表: $a=“你好” $b=“4f60” $c=“hi” $d=“00480065006C006C006F” $b和$d是UCS-2字符串。 我希望在一个表中显示所有这些数据,那么如何知道哪些数据是UCS-2,以便在显示之前进行转换?可能吗?我尝试了在php.net上找到的unicode的mb_detect_编码和preg_匹配,但即使它是一个未知符号,它仍然被认为是unicode 谢谢。首先,您显示的字符串是十六进制表示,而不是实际的UCS-2或UTF-8编码 这就是说,和之

如果我有一个数据列表:

$a=“你好”

$b=“4f60”

$c=“hi”

$d=“00480065006C006C006F”

$b和$d是UCS-2字符串。 我希望在一个表中显示所有这些数据,那么如何知道哪些数据是UCS-2,以便在显示之前进行转换?可能吗?我尝试了在php.net上找到的unicode的mb_detect_编码和preg_匹配,但即使它是一个未知符号,它仍然被认为是unicode


谢谢。

首先,您显示的字符串是十六进制表示,而不是实际的UCS-2或UTF-8编码

这就是说,和之间有一些非常巨大的差异,这将允许您编写正确检测编码的代码,并且具有非常高的成功率。但在此之前,请向我们展示您是如何使用
mb\u detect\u编码的
,并且它不起作用。再发明一个比现在更糟糕的轮子毫无意义

更新:您的输入字符串实际上不是编码的字节值;它们是值的十六进制表示形式。要撤消此操作,可以使用

$proper_string = pack('H*', $hex_encoded_string);

在此之后,
mb\u detect\u编码应该可以正常工作。

首先,您显示的字符串是十六进制表示,而不是实际的UCS-2或UTF-8编码

这就是说,和之间有一些非常巨大的差异,这将允许您编写正确检测编码的代码,并且具有非常高的成功率。但在此之前,请向我们展示您是如何使用
mb\u detect\u编码的
,并且它不起作用。再发明一个比现在更糟糕的轮子毫无意义

更新:您的输入字符串实际上不是编码的字节值;它们是值的十六进制表示形式。要撤消此操作,可以使用

$proper_string = pack('H*', $hex_encoded_string);

在此之后,
mb_-detect_编码
应该可以正常工作。

谢谢你的信息,我缺乏编码方面的知识……老实说,我已经搜索和尝试了很多方法好几个小时了,所以我不太记得我是如何使用mb_-detect_编码的,但应该是这样的:
mb_-detect_编码(“4f60”,“UTF-8”,true)
,或者干脆
mb\u检测编码(“4f60”)
,还有更多……非常感谢您的帮助。希望您不介意再问一个问题。如果在pack()中失败,是否可以返回false?如果我
pack('H*',“hi”)
,它将返回警告(非法的十六进制数字),这样我就知道这个消息不需要转换,所以我只是尝试了一种方法
函数打包($string){If(pack('H*',$string)){return true;}
,但它当然不会工作……@IreneLing:不,你不能无条件地使用它。你必须事先知道你使用的是哪种类型的字符串。我明白了,我想我必须再考虑一下其他方法。。非常感谢您的帮助。感谢您提供的信息,我缺乏编码方面的知识……老实说,我已经搜索和尝试了很多方法好几个小时了,所以我不记得我是如何使用mb_detect_编码的,但应该是这样的:
mb_detect_编码(“4f60”,“UTF-8”,true)
,或者干脆
mb_detect_编码(“4f60”)
,还有更多……非常感谢您的帮助。希望您不介意再问一个问题。如果在pack()中失败,是否可以返回false?如果我
pack('H*',“hi”)
,它将返回警告(非法的十六进制数字),这样我就知道这个消息不需要转换,所以我只是尝试了一种方法
函数打包($string){If(pack('H*',$string)){return true;}
,但它当然不会工作……@IreneLing:不,你不能无条件地使用它。你必须事先知道你使用的是哪种类型的字符串。我明白了,我想我必须再考虑一下其他方法。。非常感谢你的帮助。