Home » Php » php – Convert special characters like ' \t ' to " \t " (a real tab)

php – Convert special characters like ' \t ' to " \t " (a real tab)

Posted by: admin July 12, 2020 Leave a comment

Questions:

I want to make a CSV file importer on my website. I want the user to choose the delimiter.

The problem is when the form submits, the delimiter field is stored as ‘\t’, for example, so when I’m parsing the file, I search for the string ‘\t’ instead of a real TAB. It does the same thing with every special characters like \r, \n, etc…

I want to know the way or the function to use to convert these characters to their true representation without using an array like:

  • ‘t’ => “\t”
  • ‘r’ => “\r”
How to&Answers:

You should probably decide what special chars will you allow and create a function like this one:

function translate_quoted($string) {
  $search  = array("\t", "\n", "\r");
  $replace = array( "\t",  "\n",  "\r");
  return str_replace($search, $replace, $string);
}

Answer:

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

View an example here: http://ideone.com/IVFZk

Answer:

PHP interpreter automatically escapes double quoted strings found in PHP source files, so echo "\t" actually indicates a TAB character.

On the contrary, when you read a string from any external source, the backslash assumes its literal value: a backslash and a ‘t’. You would express it in a PHP source as "\\t" (double quotes) or '\t' (single quotes), which is not what you want.

Sebastián’s solution works, but PHP provides a native function for that.

stripcslashes() recognises C-like sequences (\a, \b, \f, \n, \r, \t and \v), as well as octal and hexadecimal representation, converting them to their actual meaning.

// C-like escape sequence
stripcslashes('\t') === "\t"; // true;

// Hexadecimal escape sequence
stripcslashes('\x09') === "\t"; // true;

// Octal escape sequence
stripcslashes('1') === "\t"; // true;

Answer:

Doesnt look like SO is leaving the tab in quotes, but tabbing once in any pad then copying into quotes should work.

$data = str_replace("\t", " ", $data);