我从 db 获取数据文件的分隔符并将其保存到某个$delimiter
var 并将其传递给文件阅读器类。
new CSVreader($delimiter);
问题是它不将其视为制表符,而是将其视为backslash + t letter
字符串。
当我像这样直接传递它时:new CSVreader("\t");
它可以正常工作
所以最后一个问题是:如何将\t
字符串从database
被视为special char (tab)
我正在使用UTF-8
数据库
我从 db 获取数据文件的分隔符并将其保存到某个$delimiter
var 并将其传递给文件阅读器类。
new CSVreader($delimiter);
问题是它不将其视为制表符,而是将其视为backslash + t letter
字符串。
当我像这样直接传递它时:new CSVreader("\t");
它可以正常工作
所以最后一个问题是:如何将\t
字符串从database
被视为special char (tab)
我正在使用UTF-8
数据库
\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
. 它还实现了您可能想要也可能不想要的八进制和十六进制转义码。
您可以使用此功能:
如果需要,您可以使用更多特殊字符扩展数组。
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);
希望这可以帮助。
您可以使用str_replace()
&strtr()
进行精确替换。但是,如果您希望您的字符串像 c 字符串一样被解释,您可以使用stripcslashes()
,但您应该小心使用它,因为它也取消了八进制和十六进制表示(例如,这stripcslashes('\\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;
有几种方法。
<?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