`str_getcsv()` 的 `$escape` 参数并不用于“转义分隔符”,而是用于转义 enclosure 内的引号字符;若需让分隔符不生效,应使用 enclosure(如单引号)将含分隔符的字段整体包裹。
PHP 的 str_getcsv() 函数设计遵循 CSV 标准规范:它通过 enclosure(包围符) 来界定字段边界,而 escape(转义符)仅作用于 enclosure 内部的 enclosure 字符本身(例如,当字段中出现单引号时,用反斜杠转义 'O\'Reilly'),它对分隔符(separator)完全无效。
因此,以下调用:
str_getcsv("test\\.a.b", ".", "'", "\\");并不会将 \. 视为“被转义的点号”,从而跳过分隔逻辑——因为 str_getcsv 根本不解析 separator 的转义序列。它只是逐字符扫描:遇到 . 就切分,除非该 . 被 enclosure(如 ')包围。
✅ 正确做法是:将含分隔符的字段用 enclosure 包裹。例如:
$result = str_getcsv("'test.a'.b", ".", "'", "\\");
var_dump($result);
// 输出:
// array(2) {
// [0] => string(6) "test.a"
// [1] => string(1) "b"
// }⚠️ 注意事项:
引号);? 总结:想让分隔符在某段文本中“失效”,唯一可靠方式是用 enclosure 将其完整包裹;$escape 参数仅服务于 enclosure 内容的引号转义,与 separator 无关。