Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中检测和/或更改文件编码_Php_Encoding_Fgets - Fatal编程技术网

在php中检测和/或更改文件编码

在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(做点什么)永远不

我有以下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(做点什么)永远不会到达。使用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”。