如何在PHP中消除fgets函数的换行符?

18

我试图创建一个画廊,使用PHP的'fgets'函数从平面文件数据库中调用图像名称。 画廊中有不同的部分,每个部分都有自己的默认图像和用户可以选择的一小组图像。 除了一个按钮外,一切正常。

页面上有一个按钮,应该使用Javascript OnClick将所有画廊重置为它们的默认图像。 它的工作方式完全符合我的要求,但有一个小故障:它复制了行末的换行符以及行上的字符,破坏了Javascript。

有问题的代码:

function back(){
document.getElementById('back').className='back';
document.getElementById('one').className='cellcont';

//This should output the proper javascript, but does not
<?php
$a = fopen('c.txt','r');
if (!$a) {echo 'ERROR: Unable to open file.'; exit;}
$b = fgets($a);
echo "document.getElementById('i1').src='$b';";
fclose($a);
?>

}

它的输出结果是什么:

function back(){
document.getElementById('back').className='back';
document.getElementById('one').className='cellcont';
document.getElementById('i1').src='00.jpg
';}

正如您所看到的,结束引号和分号在下一行,这会破坏按钮。

使用我现在正在使用的文件,我可以通过将“fgets($a)”更改为“fgets($a, 7)”来解决此问题,但我需要它获取整行,以便如果客户决定输入具有较长名称的文件,则不会破坏他们的画廊。


由于它是一个字符串,你只需要尝试在字符串中删除空格(换行)字符。我想这里有很多答案。 - Jared Farrish
3个回答

40

使用rtrim()函数。

具体来说:

rtrim($var, "\r\n");

(为避免修剪其他字符,只需传入换行符。)


如果你需要处理带有固定长度记录和尾随空格的文件,那么这个答案就是最好的选择。虽然@Alex Kennberg提供的函数对于当前问题来说是正确的,但却正是我刚刚修复的一个错误的原因。 - Bizarro
这个函数的一个奇怪之处是:通常PHP将 " " 或 ' ' 读作字符串。我一般使用 ' '。然而,你必须为这个函数使用双引号 " "。我想在这种情况下,PHP决定将 ' ' 读作单个字符而不是字符串。在本地Windows服务器上测试过。 - Josh Powlison

28

4
注意,它也会删除一些其他字符,如空格,这些可能是你想要读取的实际文件内容的一部分。 - MikaelW
2
这有点不对。@ariel的答案应该被接受,因为它只会删除行尾的换行符,而不是行两端的所有空格。 - Svish
在整个问题的背景下,这是正确的。如果您的输入需要保留尾随空格,则需要更严格地使用 trim,但当您获取 URL 列表时,您不希望有额外的空格。 - Alex Kennberg

0
$b = fgets($a);
$b = preg_replace("/[\n|\r]/",'',$b);

1
你不应该使用正则表达式来处理这个。使用 str_replace(),它会更快。但更好的方法是使用 rtrim() - Ariel
1
它也会移除管道。 - Casimir et Hippolyte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接