PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum ungewollte Zeilenumbruche und Leerzeichen?


Mark
2008-09-05, 00:06:42
Ich habe ein kleines Script geschrieben um eine Textdatei zu laden, diese zu bearbeiten und dann zu speichern.

Jedoch entstehen beim Laden der Datei in der Box dann ungewollte Leerzeichen und Zeilenumbrüche, jeweils am Anfang und am Ende. Wie unterbinde ich das?


<?php

if($_REQUEST['Send'] && $_REQUEST['Text'])
{
$file = str_replace(" ", "_", $file);
$textdatei = fopen ("../gallery/images/".$file, "w+");

$Absaetze = explode("\n", $_REQUEST['Text']);

for($i = 0; $i < count($Absaetze); $i++)
{
fwrite($textdatei, $Absaetze[$i]);
}

fclose($textdatei);
echo "Die Beschreibung wurde erfolgreich bearbeitet. <br><br>";


}
else
{
?>






<table border="0" cellpadding="1" cellspacing="2">
<form action="<?php echo$_SERVER['PHP_SELF']; ?>" method="post">
<tr>
<td>Text</td>
<td><textarea cols="40" name="Text" rows="10">

<?php

$file = str_replace(" ", "_", $file);

$fp = fopen("../gallery/images/".$file,"r");
if ($fp)
{
while(!feof($fp))
{
$text = fgets($fp);
echo"$text";
}
fclose($fp);
}
?>

</textarea></td>
</tr>
<tr>
<td align="center" colspan="2">
<? echo "<input type=hidden name=file value=".$file.">"; ?>
<input name="Send" type="submit" value="Text absenden"></td>
</form>
</table>
<?php
}
?>

Aufgerufen wird das Script einfach per edit.php=?file=Dateiname.txt


Außerdem scheine ich damit keine "echten" php-Dateien erstellen, denn alle Sonderzeichen werden mit Backslash in die Datei geschrieben und man bekommt sowas:

<?php

echo \'hallo\';

?>


//edit

habs nun hinbekommen. Die ungewollten Zeilenumbrüche und Leerzeichen kommen einfach daher, dass im Quelltext der php-Teil nicht sofort hinter der <textarea> beginnt.
Und um Php-Code zu speichern hab ich die Funktion stripslashes benutzt. Hier der fertige Code, falls es jemanden interessiert

<?php

if($_REQUEST['Send'] && $_REQUEST['Text'])
{
$file = str_replace(" ", "_", $file);
$textdatei = fopen ("../content/".$file, "w+");

$Absaetze = explode("\n", $_REQUEST['Text']);

for($i = 0; $i < count($Absaetze); $i++)
{


$Absaetze[$i] = stripslashes($Absaetze[$i]);

fwrite($textdatei, $Absaetze[$i]);
}

fclose($textdatei);
echo "Die Beschreibung wurde erfolgreich bearbeitet. <br><br>";
echo "Zurück zum Hochladen neuer Bilder: <a href=\"upload.php\" > Klick </a> <br>" ;
echo "Zurück zum Bearbeiten der Bildbeschreibung: <a href=\"test.php\" > Klick </a> <br><br>" ;
echo "zur fertigen Photogalerie: <a href=\"gallery.php\" > Klick </a>" ;

}
else
{
?>



<html>
<head>
<title></title>
<meta name="author" content="Mark">

<script type="text/javascript">
<!--
function insert(aTag, eTag) {
var input = document.forms['formular'].elements['Text'];
input.focus();
/* für Internet Explorer */
if(typeof document.selection != 'undefined') {
/* Einfügen des Formatierungscodes */
var range = document.selection.createRange();
var insText = range.text;
range.text = aTag + insText + eTag;
/* Anpassen der Cursorposition */
range = document.selection.createRange();
if (insText.length == 0) {
range.move('character', -eTag.length);
} else {
range.moveStart('character', aTag.length + insText.length + eTag.length);
}
range.select();
}
/* für neuere auf Gecko basierende Browser */
else if(typeof input.selectionStart != 'undefined')
{
/* Einfügen des Formatierungscodes */
var start = input.selectionStart;
var end = input.selectionEnd;
var insText = input.value.substring(start, end);
input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
/* Anpassen der Cursorposition */
var pos;
if (insText.length == 0) {
pos = start + aTag.length;
} else {
pos = start + aTag.length + insText.length + eTag.length;
}
input.selectionStart = pos;
input.selectionEnd = pos;
}
/* für die übrigen Browser */
else
{
/* Abfrage der Einfügeposition */
var pos;
var re = new RegExp('^[0-9]{0,3}$');
while(!re.test(pos)) {
pos = prompt("Einfügen an Position (0.." + input.value.length + "):", "0");
}
if(pos > input.value.length) {
pos = input.value.length;
}
/* Einfügen des Formatierungscodes */
var insText = prompt("Bitte geben Sie den zu formatierenden Text ein:");
input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos);
}
}
//-->
</script>


</head>
<body text="#000000" bgcolor="#FFFFFF" >


<table border="0" cellpadding="1" cellspacing="2">
<form name="formular" action="<?php echo$_SERVER['PHP_SELF']; ?>" method="post">
<tr>
<td>Text</td>
<td><textarea cols="90" name="Text" rows="30"><?php

$file = str_replace(" ", "_", $file);

$fp = fopen("../content/".$file,"r");
if ($fp)
{




while(!feof($fp))
{
$text = fgets($fp);

$text = stripslashes($text);


echo"$text";
}




fclose($fp);
}
?></textarea></td>

<p><input type="button" value="Link einfügen" onClick="insert('<a href=http://www.adresse.de>', '</a>')">
<input type="button" value="Bild einfügen" onClick="insert('<img src=http://www.adresse.de/bild.jpg>', '</img>')">
<input type="button" value="fettgedruckt" onClick="insert('<b>', '</b>')">
<input type="button" value="kursiv" onClick="insert('<i>', '</i>')">
<input type="button" value="unterstrichen" onClick="insert('<u>', '</u>')">
<br> <br>

<input type="button" value="Überschrift" onClick="insert('<b><font color=#f8dc00>', '</font></b>')">
<input type="button" value="Datum" onClick="insert('<font color=#ffffff> &nbsp;<font size=-2>', '</font>')">
<input type="button" value="normaler Text" onClick="insert('<font size=-1>', '</font>')">



</p>

</tr>
<tr>
<td align="center" colspan="2">
<? echo "<input type=hidden name=file value=".$file.">"; ?>
<input name="Send" type="submit" value="Text absenden"></td>
</form>
</table> </body>
<?php
}
?>

rotalever
2008-09-06, 12:42:20
Und um Php-Code zu speichern hab ich die Funktion stripslashes benutzt. Hier der fertige Code, falls es jemanden interessiert
Nee, das ist nicht gut. Wenn du irgendeine Möglichkeit hast magic_quotes auszustellen, dann versuche es. Mehr dazu unter: http://de3.php.net/manual/en/security.magicquotes.disabling.php

Und noch was: Wenn du Text in eine HTML-Datei einfügst, der möglicherweise Sonderzeichen enthält, dann am besten echo htmlspecialchars($text); verwenden.