UTF格式下字符串的比较

有两个UTF8的文本文件,前5个字符都是”uid”,可是用PHP来比较,==和strcmp都不对。十六进制下看,确实是有不同:

肉眼完全无法辨别。0xFFFE2200后面多了“0xFFFE”这个字符串。原来是有名的U+FEFF. BOM

根据维基的解释,多了FFFE的这个文件实际上是个UTF-16格式。

In UTF-16, a BOM (U+FEFF) may be placed as the first character of a file or character stream to indicate the endianness (byte order) of all the 16-bit code units of the file or stream.
英文倒是好办,用匹配模式清楚杂物即可。中文的话难道要不断检测“0xFFFE”这个字符串。特别是对于不懂技术的客户来说,这可真是伤脑筋。