PHP特殊字符\ t被视为字符串

时间:2013-07-01 11:45:08

标签: php database string special-characters

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

new CSVreader($delimiter);

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

当我直接传递此信息时:new CSVreader("\t");而不是正常

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

我正在使用UTF-8进行db

5 个答案:

答案 0 :(得分: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。它还实现了八进制和十六进制转义码,您可能想要也可能不想要它。

答案 1 :(得分: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);

希望这有帮助。

答案 2 :(得分:1)

您可以使用str_replace()& strtr()用于确切替换。但是如果你希望你的字符串被解释为c字符串,你可以使用stripcslashes(),但你应该小心使用它,因为它取消引用八进制和&十六进制表示(f.ex。此stripcslashes('\\0')成为空字符)。

答案 3 :(得分: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

答案 4 :(得分:0)

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;