字符串显示特殊字符,因为它是urlencoded

时间:2016-03-30 14:16:25

标签: php windows macos csv encoding

我有一个网站,用户可以上传包含一些信息的csv文件,然后我将该信息读取并保存在数据库中。问题是,用户有时会报告他/她上传的信息显示为"奇怪的字符"在浏览器中我已经检查过它并以相同的方式保存在数据库中(使用"奇怪的字符)。所以我要求他/她使用的文件并从我的电脑上传,一切都很顺利。用户从Mac计算机上传,我从Windows计算机上传。该站点的服务器是Windows。

这是用户描述的错误的打印件:

User print

我可以上传相同的csv并且该字符串保持正常。我注意到了#34;奇怪的角色"是url的代码。例如,在打印中,空格被%20替换。但是这个字符串来自一个显然没问题的csv文件。由于我无法重现错误,因此很难理解可能发生的事情。但似乎所有似乎都是Mac-Windows之间的某种编码问题。你有这个问题之王吗?

编辑:

这是处理csv文件的代码:

            while ($valor = fgetcsv ($handle, filesize($T2), ";")){
                for ($i=0;$i<$conta;$i++){
                    $cv=$data[$i];
                    $row[$cv]=trim($valor[$i]); 
                }

                if ($row['Ano']==$sql_Documento['Ano'] && $sql_Documento['NumDocumento']==$row['Numero']){    
                    $count++;
                    $campos = array();
                    $campos['IdDocumento'] = $sql_Documento[IdDocumento];
                    $campos['Sociedade'] = mssql_escape_string($row['Sociedade']); //this is the field that gives me problems
                    $campos['DocumentoId'] = $sql_Documento[DocumentoId];
                    $campos['page_dr'] = $row['Pagdr'];
                    $campos['page_file'] = $row['Pagpdf'];
                    $DocumentoId = insertNewRecord("DocSoc",$campos);
                }              

            }

mssql_escape_string是这个函数:

    function mssql_escape_string($data) {
        if ( !isset($data) or empty($data) ) return '';
        if ( is_numeric($data) ) return $data;

        $non_displayables = array(
            '/%0[0-8bcef]/',            // url encoded 00-08, 11, 12, 14, 15
            '/%1[0-9a-f]/',             // url encoded 16-31
            '/[\x00-\x08]/',            // 00-08
            '/\x0b/',                   // 11
            '/\x0c/',                   // 12
            '/[\x0e-\x1f]/'             // 14-31
        );
        foreach ( $non_displayables as $regex )
            $data = preg_replace( $regex, '', $data );
        $data = str_replace("'", "''", $data );
        return $data;
    }

0 个答案:

没有答案