我从db获取数据文件的分隔符并将其保存到某些$delimiter
var并将其传递给文件阅读器类。
new CSVreader($delimiter);
问题在于它不会将其视为制表符,而是将其视为backslash + t letter
字符串。
当我直接传递此信息时:new CSVreader("\t");
而不是正常
所以最后一个问题是:如何将\t
字符串从database
转换为special char (tab)
我正在使用UTF-8
进行db
答案 0 :(得分:3)
您可以使用\t
str_replace
$text = str_replace('\t', "\t", $text);
如果你有更多的转义序列,而不仅仅是\t
,str_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;