Handling tab to space conversions
When outputting code in a browser, or automatically formatting someone else’s code, it’s handy to be able to accurately convert tabs to spaces.
This function converts tabs to the appropriate number of spaces to preserve formatting.
<?php
/**
* Converts tabs to the appropriate amount of spaces while preserving formatting
*
* @author Aidan Lister <aidan@php.net>
* @version 1.2.0
* @link http://aidanlister.com/2004/04/handling-tab-to-space-conversions/
* @param string $text The text to convert
* @param int $spaces Number of spaces per tab column
* @return string The text with tabs replaced
*/
function tab2space ($text, $spaces = 4)
{
// Explode the text into an array of single lines
$lines = explode("\n", $text);
// Loop through each line
foreach ($lines as $line) {
// Break out of the loop when there are no more tabs to replace
while (false !== $tab_pos = strpos($line, "\t")) {
// Break the string apart, insert spaces then concatenate
$start = substr($line, 0, $tab_pos);
$tab = str_repeat(' ', $spaces - $tab_pos % $spaces);
$end = substr($line, $tab_pos + 1);
$line = $start . $tab . $end;
}
$result[] = $line;
}
return implode("\n", $result);
}
?>
A quick example:
<?php
$data = "fooo\t\tbar\n";
$data .= "foooo\t\tbar\n";
$data .= "fooooo\t\tbar\n";
echo "This is the example data:\n";
echo $data;
echo "n";
echo "With simple replace:\n";
echo str_replace("\t", " ", $data);
echo "n";
echo "With tab2space:\n";
echo tab2space($data, 8);
?>
This would produce the following output:
This is the example data:
fooobar
foooobar
fooooobar
With simple replace: fooo bar foooo bar fooooo bar
With tab2space: fooo bar foooo bar fooooo bar </code>