PHP-trim()的问题 背景:

PHP-trim()的问题 背景:,php,arrays,character-encoding,trim,spaces,Php,Arrays,Character Encoding,Trim,Spaces,我正在将.csv文件“keys”(第一行)保存到数组$csv中,以获取文件的多维数组。 包含多个单词的键将其第一个和最后一个空格保留为第一个和最后一个字符。该文件在Windows-1252中编码,我将其转换为UTF-8 过程: 结果: 这是前两把钥匙,第二把保留空格 初始过程(键=>值): [Commande] => C...... [ Date de création ] => 01/01/1970 [Commande] => C [ Date de création ]

我正在将
.csv
文件“keys”(第一行)保存到
数组$csv
中,以获取文件的多维数组。
包含多个单词的键将其第一个和最后一个空格保留为第一个和最后一个字符。该文件在
Windows-1252
中编码,我将其转换为
UTF-8

过程: 结果: 这是前两把钥匙,第二把保留空格

初始过程(键=>值):

[Commande] => C......
[ Date de création ] => 01/01/1970
[Commande] => C
[ Date de création ] => +
[Commande] => C
[ Date de création ] => %20
使用
urlencode(substr($keys[$j],0,1))
作为值:

[Commande] => C......
[ Date de création ] => 01/01/1970
[Commande] => C
[ Date de création ] => +
[Commande] => C
[ Date de création ] => %20
使用
rawurlencode(substr($keys[$j],0,1))
作为值:

[Commande] => C......
[ Date de création ] => 01/01/1970
[Commande] => C
[ Date de création ] => +
[Commande] => C
[ Date de création ] => %20
使用我在其他SO问题上找到的函数,如
preg\u replace('/\xc2\xa0/','$keys)
总是输出
%20


我可以跳过这个问题或以不同的方式工作,但我不明白为什么我不能
trim()
这些字符串

完整示例代码:
$file=file(\uu DIR\uu.'/path/to/'.$csv\u file);
//钥匙
$keys=mb_convert_编码($file[0],'UTF-8','Windows-1252');
$keys=修剪(str_替换(''',''$keys));
$keys=分解(“;”,$keys);
$CSV=[];
对于($i=1;$i
大概你是从这句话开始的:

Commande; Date de création ; Something something 
然后将其转换为这一行(在此处引入空格):

然后进行修剪(删除线条起点和终点的空格):

然后你就把线炸开了:

array('Commande', ' Date de création ', ' Something something')
$keys = array_map('trim', $keys);

  • 在对行进行分解后,而不是在以下操作之前,您需要对每个单独的值进行修剪:

    $keys = str_getcsv($file[0], ';');
    
  • 您应该使用CSV解析函数来解析CSV,而不是重新发明轮子:

    function read_and_convert_line($fh) {
        $values = fgetcsv($fh, 0, ';');
        if (!$values) {
            return false;
        }
    
        return array_map(
            function ($value) { return mb_convert_encoding($value, 'UTF-8', 'Windows-1252'); }, 
            $values
        );
    }
    
    $fh = fopen(__DIR__ . '/path/to/' . $csv_file);
    $headers = read_and_convert_line($fh);
    $data = [];
    
    while ($row = read_and_convert_line($fh)) {
        $data[] = array_combine($headers, $row);
    }
    
    fclose($fh);
    print_r($data);
    
  • 为了提高效率,您应该使用以下工具解析整个CSV文件:

    这将完全消除
    修剪
    的需要


  • 我不清楚这些代码片段和输出是如何精确连接的。您能否生成一个自包含的示例,我们可以执行该示例,并将输入与输出清楚地连接起来?此外,在检查字符串的组成时,
    bin2hex
    是必不可少的。
    trim()
    不会删除其间的空格。只需这样做:-
    $keys=str_replace(“,”,“$keys);
    @deceze我不知道
    bin2hex
    可以帮我。我正在粘贴示例代码。如果我理解正确,您在某个点上有一个字符串
    $keys
    作为
    \u item1\u item2\u item3.
    (下划线而不是空格)。如果你修剪那根弦,它实际上只会修剪第一个和最后一个空格,而不会修剪中间空格。我本可以避免这个错误。谢谢你的建议,我真的很感激。