提问人:Jeff 提问时间:9/18/2009 更新时间:11/23/2013 访问量:32374
输出过程中的PHP“退格”字符可能吗?
PHP "backspace" character during output possible?
问:
我有一种感觉,答案是“这是不可能的”,但我想我会要求满足我的好奇心。
我有一些代码在\n不可避免的地方被回显:
echo "Hello \n";
echo "World!";
我希望该行简单地读取(在代码输出中):
世界您好!
...从而删除 \n.
所以我想知道是否可以在PHP的输出中执行“退格”字符?
像这样简单的东西str_replace( "\n", 'backspace-character', $str );
答:
只是用空格替换“”(或者什么都不用,如果你的传入字符串中已经有一个空格)怎么样?\n
像这样,例如:
$str = "Hello\nWorld!";
var_dump($str);
$str = str_replace("\n", ' ', $str);
var_dump($str);
第一个输出给出:
string 'Hello
World!' (length=12)
第二个:
string 'HelloWorld!' (length=11)
这还不够吗?
(或者也许我不太理解这个问题)
你不能这样做吗:
$str = str_replace("\n", ' ', $str);
while (strpos($str, ' ') !== false) // while there's two spaces in a row
$str = str_replace(' ', ' ', $str);
现在,每个空格或字符序列将仅替换为一个空格。
(因为如果你只是删除\n,你可能会有一些地方缺少一个空格,如果你只是用一个空格替换它,你就会有一些地方连续有多个空格)。$str
\n
编辑:我不知道循环是否真的有必要,但我在这里没有什么可以测试的,如果会自动做这个伎俩(而且我不认为将正则表达式用于如此简单的事情真的是一个好主意)。str_replace
评论
如果你想做任何事情,你可以使用输出缓冲区:
ob_start();
echo "Hello\n World";
$out = ob_get_contents();
ob_end_clear();
echo str_replace('\n', '', $out);
您甚至可以使用 httaccess 将包含此内容的脚本附加到任何调用的脚本中。
但是,您不能在将其设置为 stdout 之前处理它吗?喜欢
function print2($str){
echo str_replace("\n", '', $str);
}
评论
ob_end_clean();
是的,退格字符是 ASCII 字符代码 8(根据 ASCII 表),因此您可以使用 chr() 在 php 中输出它。例如:
echo 'ab' . chr(8);
将输出“a”
评论
如果输出目标是 HTML,那么额外的空格就无关紧要了 - 浏览器不会呈现多个连续的空间(这就是我们有
)
如果输出目标是其他内容,则只需清理输出即可。从其他回复中可以看出,有无数种方法可以做到这一点。似乎您正在使用 echo 语句,因此输出缓冲函数将是您想要采用的路线。
ob_start();
echo "Hello \n";
echo "World!";
$output = preg_replace( "/ +/", ' ', str_replace( "\n", ' ', ob_get_clean() ) );
echo $output;
与其考虑如何做退格字符,我建议重新思考这个问题。为什么要收回部分输出?可能是因为你输出得太早了。
不要对中间值进行回显,而是将它们追加到缓冲区。然后编辑缓冲区。然后打印出来。如果您无法控制是否生成输出(例如,您正在使用输出内容的外部供应商库),请使用 PHP 输出缓冲。
我不知道如何做退格键,但如果你只是想做一个新行,我会使用:
echo "<br>";
PHP 代码允许使用 html 代码,只要它在 print 或 echo 语句中使用并且位于双引号内。
这不是对他的确切问题的直接回答,而是标题似乎暗示的内容:输出 PHP“退格”字符,这可能仅在使用 PHP CLI 时才有用。
您可以在 ASCII 表上找到此字符(和其他字符)的正确 ASCII 代码,然后使用 chr() 或转义序列:
echo chr(8);
echo "\010";
评论