簡體   English   中英

PHP:我從CSV文件中得到奇怪的輸出,雙引號如\\ x00P \\ x00h \\ x00o \\ x00n

[英]PHP: I'm getting strange output from CSV file with double quotes like \x00P\x00h\x00o\x00n

我正在使用一個簡單的函數上傳.csv文件,並將其轉換為關聯數組。 它在沒有引號的情況下可以正常工作,但是如果有引號,我會得到非常奇怪的輸出。

我的工作文件如下所示:

Phone number:
+1 5556666999
+1 5551123336

這是我的輸出:

array:2 [▼
  0 => array:1 [▼
    "Phone number" => "+1 5556666999"
  ]

  1 => array:1 [▼
    "Phone number" => "+1 5551123336"
  ]
]


print_r(csvToAssocArray($filename);

function csvToAssocArray($filename)
{
    $csvAsArray = array_map(function($d) {
            return str_getcsv($d, ",");
        }, file($filename));

        $header = array_shift($csvAsArray);

        $csv = array();

        foreach ($csvAsArray as $row) {
          $csv[] = array_combine($header, $row);
        }

    return $csv;
}

但是,如果我有一個像這樣的文件,在我的值周圍用雙引號引起來,那么我就得到了這個值。

我的檔案:

"Phone number"
"+1 55500718"
"+1 55551919"

file_get_contents($file)

"""
"\x00P\x00h\x00o\x00n\x00e\x00 \x00n\x00u\x00m\x00b\x00e\x00r\x00"\x00\n
\x00"\x00+\x001\x00 \x005\x005\x005\x000\x000\x007\x001\x008\x00"\x00\n
\x00"\x00+\x001\x00 \x005\x005\x005\x005\x001\x009\x001\x009\x00"\x00\n
\x00
"""

print_r(csvToAssocArray($filename);

array:3 [▼
  0 => array:1 [▼
    "\x00P\x00h\x00o\x00n\x00e\x00 \x00n\x00u\x00m\x00b\x00e\x00r\x00\x00" => "\x00"\x00+\x001\x00 \x005\x005\x005\x000\x000\x007\x001\x008\x00"\x00"
  ]

  1 => array:1 [▼
    "\x00P\x00h\x00o\x00n\x00e\x00 \x00n\x00u\x00m\x00b\x00e\x00r\x00\x00" => "\x00"\x00+\x001\x00 \x005\x005\x005\x005\x001\x009\x001\x009\x00"\x00"
  ]

  2 => array:1 [▼
    "\x00P\x00h\x00o\x00n\x00e\x00 \x00n\x00u\x00m\x00b\x00e\x00r\x00\x00" => "\x00"
  ]
]

這是怎么回事 甚至file_get_contents也會給出奇怪的輸出。

您的文件可能采用UTF-16編碼(無論從何處導出,都可能錯誤地稱為“ Unicode”),這意味着每個其他字節都是基本ASCII字符的NUL字節。 您可能想要在PHP外部將文件轉換為純ASCII / UTF-8,或者在PHP內部使用iconvmb_convert_encoding

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM