回答
我不知道這是否實際工作,但手冊頁面上有一些示例實現,你可以爲這樣的後備使用:
if(!function_exists('str_getcsv')) {
function str_getcsv($input, $delimiter = ',', $enclosure = '"') {
if(! preg_match("/[$enclosure]/", $input)) {
return (array)preg_replace(array("/^\\s*/", "/\\s*$/"), '', explode($delimiter, $input));
}
$token = "##"; $token2 = "::";
//alternate tokens "\034\034", "\035\035", "%%";
$t1 = preg_replace(array("/\\\[$enclosure]/", "/$enclosure{2}/",
"/[$enclosure]\\s*[$delimiter]\\s*[$enclosure]\\s*/", "/\\s*[$enclosure]\\s*/"),
array($token2, $token2, $token, $token), trim(trim(trim($input), $enclosure)));
$a = explode($token, $t1);
foreach($a as $k=>$v) {
if (preg_match("/^{$delimiter}/", $v) || preg_match("/{$delimiter}$/", $v)) {
$a[$k] = trim($v, $delimiter); $a[$k] = preg_replace("/$delimiter/", "$token", $a[$k]); }
}
$a = explode($token, implode($token, $a));
return (array)preg_replace(array("/^\\s/", "/\\s$/", "/$token2/"), array('', '', $enclosure), $a);
}
}
非常完美,非常感謝 – Jam
啊哈,我在php manual
<?php
if (!function_exists('str_getcsv')) {
function str_getcsv($input, $delimiter = ',', $enclosure = '"', $escape = '\\', $eol = '\n') {
if (is_string($input) && !empty($input)) {
$output = array();
$tmp = preg_split("/".$eol."/",$input);
if (is_array($tmp) && !empty($tmp)) {
while (list($line_num, $line) = each($tmp)) {
if (preg_match("/".$escape.$enclosure."/",$line)) {
while ($strlen = strlen($line)) {
$pos_delimiter = strpos($line,$delimiter);
$pos_enclosure_start = strpos($line,$enclosure);
if (
is_int($pos_delimiter) && is_int($pos_enclosure_start)
&& ($pos_enclosure_start < $pos_delimiter)
) {
$enclosed_str = substr($line,1);
$pos_enclosure_end = strpos($enclosed_str,$enclosure);
$enclosed_str = substr($enclosed_str,0,$pos_enclosure_end);
$output[$line_num][] = $enclosed_str;
$offset = $pos_enclosure_end+3;
} else {
if (empty($pos_delimiter) && empty($pos_enclosure_start)) {
$output[$line_num][] = substr($line,0);
$offset = strlen($line);
} else {
$output[$line_num][] = substr($line,0,$pos_delimiter);
$offset = (
!empty($pos_enclosure_start)
&& ($pos_enclosure_start < $pos_delimiter)
)
?$pos_enclosure_start
:$pos_delimiter+1;
}
}
$line = substr($line,$offset);
}
} else {
$line = preg_split("/".$delimiter."/",$line);
/*
* Validating against pesky extra line breaks creating false rows.
*/
if (is_array($line) && !empty($line[0])) {
$output[$line_num] = $line;
}
}
}
return $output;
} else {
return false;
}
} else {
return false;
}
}
}
?>
你還在使用'str_getcsv' –
@ShankarDamodaran,謝謝。你很熱心。 – srain
你可以嘗試用fgetcsv()
做雖然你必須打開該文件,進入流能夠閱讀它發現這個代碼片斷。
例子:
$fh = fopen('php://temp', 'r+');
fwrite($fh, $string);
rewind($fh);
$row = fgetcsv($fh);
fclose($fh);
我發現上面的代碼片段沒有正確解析csv文件,其中的條目包含在引號中並且包含逗號本身。
但是,您可以將其他答案組合在一起,爲我工作。
基本上,如果未定義str_getcsv函數,請自己定義它,並且其實現應創建一個內存文件句柄,然後將其傳遞給fgetcsv。出於某種原因,GoDaddy上的PHP(我託管一個站點)沒有str_getcsv,但是有fgetcsv。去搞清楚。
if (!function_exists('str_getcsv')) {
function str_getcsv($input, $delimiter = ',', $enclosure = '"', $escape = '\\', $eol = '\n') {
$fh = fopen('php://temp', 'r+');
fwrite($fh, $input);
rewind($fh);
$row = fgetcsv($fh);
fclose($fh);
return $row;
}
}
- 1. 使用PHP str_getcsv功能
- 2. 調用未定義功能問題
- 3. FatalErrorException:調用未定義功能link_to_route()
- 4. 調用未定義功能sccp_get_model_data()
- 5. 調用未定義功能ssh2_connect()
- 6. 調用未定義功能sqlite_escape_string()
- 7. 調用未定義功能exif_read_data()函數
- 8. 調用未定義功能mysqli_connect
- 9. 「調用未定義功能finfo_open()」 bluemix
- 10. 調用未定義功能set_flashdata()在笨
- 11. 調用未定義功能的start()
- 12. 調用未定義功能imagefttext()
- 13. 調用未定義功能array_column()
- 14. 調用未定義功能curl_init()PHP-GTK
- 15. 調用未定義功能 - laravel
- 16. 調用未定義功能類
- 17. 調用未定義功能curl_init()
- 18. 調用未定義功能update_sub_field()ACF
- 19. 調用未定義功能,get_settings WordPress的
- 20. 調用未定義功能sqlite_libversion()
- 21. 調用未定義功能simplexml_load_string()
- 22. Libsodium「調用未定義功能sodium_randombytes_buf」
- 23. 調用未定義功能_curl()
- 24. 調用未定義功能printer_open()
- 25. 調用未定義功能Laravel
- 26. 的Yii:調用未定義功能CDbExpression()
- 27. 調用未定義功能exif_imagetype()
- 28. 中調用內Promise.catch功能未定義
- 29. 笨:調用未定義功能URL()
- 30. 調用未定義功能domxml_new_doc()
檢查手冊第一http://php.net/manual/en/function.str-getcsv.php –
您的字符串寫入PHP://然後倒回溫並用f_getcsv() –