Как удалить разрыв строки из функции fgets в PHP?

Я пытаюсь создать галерею, которая вызывает имена изображений из базы данных плоских файлов, используя функцию 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)", но мне нужно, чтобы он захватывал всю строку, чтобы, если клиент решает ввести файл с более длинным именем, он не ломает галерею на них.


person Shreger    schedule 19.09.2011    source источник
comment
Поскольку это строка, вы просто пытаетесь удалить символы пробела (перевода строки) в строке. Я полагаю, здесь найдется множество ответов на этот вопрос.   -  person Jared Farrish    schedule 20.09.2011


Ответы (3)


Лучше всего использовать функцию php trim(). См. http://php.net/manual/en/function.trim.php.

$b = trim(fgets($a));
person Alex Kennberg    schedule 19.09.2011
comment
будьте осторожны, он также удалит некоторые другие символы, такие как пробелы, которые могут быть частью фактического содержимого файла, который вы хотите прочитать. - person MikaelW; 26.02.2015
comment
Это как-то неправильно. Ответ @ariel должен быть принятым, поскольку он удалит только конечную новую строку, а не все пробелы на обоих концах строки. - person Svish; 26.02.2016
comment
В контексте всего вопроса это правильно. Если ваш ввод требует сохранения пробелов в конце, вам нужно более строго использовать обрезку, но когда вы получаете список URL-адресов, вам не нужен дополнительный пробел. - person Alex Kennberg; 27.02.2016

Используйте 1_.

Конкретно:

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

(Чтобы не обрезать другие символы, передайте только новую строку.)

person Ariel    schedule 19.09.2011
comment
Если вам нужно обрабатывать файлы с записями фиксированной длины и конечными пробелами, этот ответ является единственным. Функция, предоставленная @Alex Kennberg, хотя и верна для текущего вопроса, была именно причиной ошибки, которую я только что исправил. - person Bizarro; 11.11.2016
comment
Странная вещь с этой функцией: обычно PHP читает или или ' ' как строку. Я обычно использую ''. Однако вы должны использовать кавычки для этой функции. Я предполагаю, что в этом случае PHP решает прочитать ' ' как одиночный символ, а не как строку. Проверено на локальном сервере Windows. - person Josh Powlison; 19.11.2018

person    schedule
comment
Вы не должны использовать регулярное выражение для этого. Используйте str_replace(), так будет намного быстрее. Но еще лучше использовать rtrim() - person Ariel; 20.09.2011
comment
Он также снимает трубы. - person Casimir et Hippolyte; 20.01.2020