Php 转换特殊字符,如'\t';至\";(真正的账单)

Php 转换特殊字符,如'\t';至\";(真正的账单),php,csv,special-characters,Php,Csv,Special Characters,我想在我的网站上创建一个CSV文件导入器。我希望用户选择分隔符 问题是,当表单提交时,分隔符字段存储为'\t',例如,因此在分析文件时,我搜索字符串'\t',而不是实际的制表符。它对每个特殊字符都执行相同的操作,如\r\n等 我想知道在不使用以下数组的情况下,将这些字符转换为其真实表示形式的方法或函数: 't'=>“\t” 'r'=>“\r” 将标签保留在引号中看起来不像是这样,但是在任何一个键盘中进行一次标签切换,然后复制到引号中应该可以 $data = str_replace("\t",

我想在我的网站上创建一个CSV文件导入器。我希望用户选择分隔符

问题是,当表单提交时,分隔符字段存储为'\t',例如,因此在分析文件时,我搜索字符串'\t',而不是实际的制表符。它对每个特殊字符都执行相同的操作,如\r\n等

我想知道在不使用以下数组的情况下,将这些字符转换为其真实表示形式的方法或函数:

  • 't'=>“\t”
  • 'r'=>“\r”

将标签保留在引号中看起来不像是这样,但是在任何一个键盘中进行一次标签切换,然后复制到引号中应该可以

$data = str_replace("\t", " ", $data);

在这里查看一个示例:

您可能应该决定允许哪些特殊字符,并创建一个类似以下的函数:

function translate_quoted($string) {
  $search  = array("\\t", "\\n", "\\r");
  $replace = array( "\t",  "\n",  "\r");
  return str_replace($search, $replace, $string);
}

PHP解释器自动转义PHP源文件中的双引号字符串,因此
echo“\t”
实际上表示制表符

相反,当您从任何外部源读取字符串时,反斜杠采用其文字值:反斜杠和“t”。您可以在PHP源代码中将其表示为
“\\t”
(双引号)或
“\t”
(单引号),这不是您想要的

这是可行的,但PHP为此提供了一个本机函数

识别类C序列(\a、\b、\f、\n、\r、\t和\v)以及八进制和十六进制表示,并将其转换为实际含义

// C-like escape sequence
stripcslashes('\t') === "\t"; // true;

// Hexadecimal escape sequence
stripcslashes('\x09') === "\t"; // true;

// Octal escape sequence
stripcslashes('\011') === "\t"; // true;

HTML实体对于HTML很好,但如果将粘贴复制到纯文本文件中,这不会导致问题吗?
// C-like escape sequence
stripcslashes('\t') === "\t"; // true;

// Hexadecimal escape sequence
stripcslashes('\x09') === "\t"; // true;

// Octal escape sequence
stripcslashes('\011') === "\t"; // true;