在php中检测和/或更改文件编码
我有以下php代码。它读取客户端在Drupal站点上载的文件在php中检测和/或更改文件编码,php,encoding,fgets,Php,Encoding,Fgets,我有以下php代码。它读取客户端在Drupal站点上载的文件 $fp = fopen($fileUri, 'r'); $buffer = 4096; while(($line = fgets($fp, $buffer)) ){ if (preg_match("/last update/", $line)) { // do something here... } } 然而,当用户上传一个使用UCS-2LE编码的文件时,这里的do something(做点什么)永远不
$fp = fopen($fileUri, 'r');
$buffer = 4096;
while(($line = fgets($fp, $buffer)) ){
if (preg_match("/last update/", $line)) {
// do something here...
}
}
然而,当用户上传一个使用UCS-2LE编码的文件时,这里的do something(做点什么)永远不会到达。使用ANSI或UTF-8,一切正常
我尝试过用mb_convert_编码转换编码和/或用mb_detect_编码检测编码。我也试过iconv。似乎什么都不管用
那么,当我不知道客户文件的编码方式时,什么是确保preg_匹配工作的最佳方式呢
更新
我的表单有accept charset=UTF-8,以下是我的请求头:
检测编码本身就有风险。你不能权威地说一个文件是在浏览X的基础上编码的。e、 g.如果文件从未使用任何值大于127的字符,则无法区分UTF-8和ASCII。充其量,您可以说文件不是特定的编码,因为文件中的某些内容违反了编码规则。mb_detect_encoding是否返回FALSE?您是否可以检查是否存在一个请求头内容类型,该类型在上载时设置了可能指示正确编码的字符集?如果没有,试着在上传表单上强制它显然,表单已经有accept charset=UTF-8,这是我正在制作的Drupal模块。我用请求标题上的信息更新了我的问题。@PaoloNiccolòGiubelli大多数行返回“ASCII”,有些行返回“UTF-8”。