PHP特殊字符 被视为字符串


PHP Special char treated as string

我正在从数据库中获取数据文件的分隔符,并将其保存到某个$delimiter var中,然后将其传递给文件读取器的类。

new CSVreader($delimiter);

问题是,它并没有把它当作制表符,而是把它当作backslash + t letter字符串。

当我像new CSVreader("'t");这样直接传递时,它可以正常

最后一个问题是:如何将database中的't字符串转换为special char (tab)

我使用UTF-8进行数据库

您可以使用str_replace:将't替换为制表符

$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。它还实现了八进制和十六进制转义码,您可能需要也可能不需要。

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;

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

您可以使用此函数:

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

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);

希望这能有所帮助。

有几种方法。

<?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