将特殊字符(如'\ t')转换为“\ t”(实际制表符)

时间:2011-05-13 19:21:24

标签: php csv special-characters

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

问题是当表单提交时,分隔符字段存储为'\ t',例如,所以当我解析文件时,我搜索字符串'\ t'而不是真正的TAB。它对每个特殊字符都有同样的作用,比如\ r,\ n等......

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

  • 't'=> “\ t” 的
  • 'r'=>为 “\ r”
  • ...

4 个答案:

答案 0 :(得分:6)

你应该决定允许哪些特殊字符并创建一个像这样的函数:

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

答案 1 :(得分:4)

echo str_replace("\\t", "\t", $string);

在此处查看示例:http://ideone.com/IVFZk

答案 2 :(得分:1)

PHP解释器会自动转义在PHP源文件中找到的双引号字符串,因此echo "\t"实际上表示TAB字符。

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

Sebastián's solution可以工作,但是PHP为此提供了本机功能。

stripcslashes()识别类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;

答案 3 :(得分:0)

看起来没有SO将标签留在引号中,但在任何打击垫中标记一次然后复制到引号应该有效。

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