0

我从 db 获取数据文件的分隔符并将其保存到某个$delimitervar 并将其传递给文件阅读器类。

new CSVreader($delimiter);

问题是它不将其视为制表符,而是将其视为backslash + t letter字符串。

当我像这样直接传递它时:new CSVreader("\t");它可以正常工作

所以最后一个问题是:如何将\t字符串从database被视为special char (tab)

我正在使用UTF-8数据库

4

5 回答 5

3

\t您可以使用制表符替换str_replace

$text = str_replace('\t', "\t", $text);

如果您有更多转义序列,而不仅仅是\tstr_replace则允许在数组中指定替换:

$text = str_replace(array('\t','\n','\r','\f','\b','\a','\e','\\\\'),
                    array("\t","\n","\r","\f","\010","\007","\033","\\"), $text);

啊,这是 PHP 中允许的转义序列的完整列表:http ://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double

我应该提一下,str_replace没有正确进行替换;相当于按顺序对每一对进行替换。这意味着类似\\t的内容会根据顺序扩展为制表符或制表符之前的反斜杠,而不是\t. 这个问题是通过使用解决的strtr

$text = strtr($text, array('\t'=>"\t",'\n'=>"\n",'\r'=>"\r",'\f'=>"\f",
                      '\b'=>"\010",'\a'=>"\007",'\e'=>"\033",'\\\\'=>"\\"));

您可以使用的另一个功能是stripcslashes. 它还实现了您可能想要也可能不想要的八进制和十六进制转义码。

于 2013-07-01T11:48:15.470 回答
1

您可以使用此功能:

如果需要,您可以使用更多特殊字符扩展数组。

function myFunc($string) {
  $search  = array('\t', '\n', '\r'); //you can add more special chars here
  $replace = array( "\t",  "\n",  "\r");
  return str_replace($search, $replace, $string);
}

或者,如果您更喜欢单行:

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

希望这可以帮助。

于 2013-07-01T11:49:49.523 回答
1

您可以使用str_replace()&strtr()进行精确替换。但是,如果您希望您的字符串像 c 字符串一样被解释,您可以使用stripcslashes(),但您应该小心使用它,因为它也取消了八进制和十六进制表示(例如,这stripcslashes('\\0')变成了空字符)。

于 2013-07-01T12:03:45.600 回答
1

PHP 解释器自动转义 PHP 源文件中的双引号字符串,因此new CSVreader("\t")实际上表示一个 TAB 字符。

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

无论如何,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;
于 2020-01-01T09:20:24.443 回答
0

有几种方法。

<?php
function trans($string) {
    return strtr($string, array(
        '\t'    => "\t",
        '\r'    => "\r",
        '\n'    => "\n"
    ));
}

$string = 'Hello\tAnthony';

echo $string;                               //Hello\tAnthony
echo str_replace('\t', chr(9), $string);    //Hello Anthony
echo trans($string);                        //Hello Anthony
于 2013-07-01T11:52:18.530 回答