Archivlink: javarea.de Forum > PHP, MySQL & CGI > Steuerzeichen in Formularen
Vollständigen Link anzeigen: javarea.de Forum > PHP, MySQL & CGI > Steuerzeichen in Formularen
Pages: [1]
| geschrieben von mosi am 10.02.2009 - 21:58 |
Hallo, mich plagt seit einigen Tagen ein kleines Problem. Ich muss eine recht große CSV-Datei auseinnandernehmen. Die einzelnen "Spalten" sind Tabulator getrennt. Bisher hatte ich dafür ein Skript, dass aber nur Semikolons behandelt hat. Ich weiß, dass es extra für csv-Dateien eine Funktion gibt. Diese kommt in diesem speziellen Fall aber nicht zum Einsatz - sollte jetzt aber nicht das Problem sein, ist letztendlich auch nur ein kleiner Codeausschnitt:
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
|
<?
// Trennzeichen definieren
if ($_POST[trennzeichen] == '')
$trennzeichen = ';';
else
$trennzeichen = stripslashes ($_POST[trennzeichen]);
// Zeilenweise CSV-Datei auslesen
while ($line = fgets($file)) {
// Zeile am Semikolon trennen; Groesse feststellen
$split = @explode($trennzeichen, $line, -1);
?>
|
Nun habe ich es in so fern erweitert, dass man in einer Eingabemaske das Trennzeichen selber wählen kann. Wenn ich nun allerdings \t eingebe funktioniert dies nicht. Anfangs dachte ich, es liegt am automatischen Escapen, deshalb entsprechender code oben. Folgendes funktioniert übrigens astrein:
| PHP-Quelltext | 1:
2:
3:
|
<?
$split = @explode("\t", $line, -1);
?>
|
Ich hab jetzt stundenlang mit dem Rumprobieren mit Kombinieren von Anführungszeichen und Escapen verbracht und bekomme es einfach nicht hin. Hat jemand eine Idee? |
| geschrieben von Klaush am 11.02.2009 - 08:08 |
folgendes habe ich probiert:
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
|
<?
function infoArray($String)
{
print '<pre>';
print_r($String);
print '</pre>';
}
$trenner = "\t";
$line = "javarea ist einfach spitze ";
$split = @explode($trenner, $line, -1);
infoArray($split);
?>
|
Als Ergebnis bekomme ich das hier:
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
|
<?
Array
(
[0] => javarea
[1] => ist
[2] => einfach
[3] => spitze
)
?>
|
Wenn ich den String so verändere das anstatt eines Tabulatorzeichens zwischen "javarea und ist" ein Leerzeichen eingefügt wird, dann bekomme ich das hier:
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
|
<?
Array
(
[0] => javarea ist
[1] => einfach
[2] => spitze
)
?>
|
PHP verhält sich völlig richtig und interpretiert das Steuerzeichen korrekt. |
| geschrieben von mosi am 15.02.2009 - 17:16 |
Das ist richtig, aber wie bekomme ich das Steuerzeichen richtig via post übermittelt.
Dazu folgendes kleines script (hängt auch an):
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
|
<?php
function test ($sz) {
// wenn kein Steuerzeichen uebergeben, dann \n
if ($sz == '' || !$sz)
$sz = "\n";
else {
$sz = stripslashes ($sz);
echo 'gewähltes Steuerzeichen: '.$sz.'<br/>';
} // else
// Anwendung von explode () auf folgenden String
$stream = "Ich bin ein\tApfel.\nich bin eine\tBirne.";
return explode ($sz, $stream);
} // test ()
?>
<html>
<head>
<title>test</title>
</head>
<body></body>
<?php
if ($_POST[action] == 'senden') {
echo "<pre><code>";
print_r (test ($_POST[sz]));
echo "</code></pre>";
} // if
?>
<br /><br />
<form action="./steuerzeichen.php" method="post">
Steuerzeichen:
<input type="text" name="sz"><br />
<input type="submit" name="action" value="senden">
</form>
</html>
|
Macht man keine Angaben funktioniert es (entspricht deinen Beispielen), sobald aber \t oder \n via formular übermittelt wird, wird es nicht mehr als Steuerzeichen interpretiert.
Ausgabe ohne Angabe eines Steuerzeichens:
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
|
<?
Array
(
[0] => Ich bin ein Apfel.
[1] => ich bin eine Birne.
)
?>
|
Ausgabe mit Angabe eines Steuerzeichens:
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
|
<?
gewähltes Steuerzeichen: \n
Array
(
[0] => Ich bin ein Apfel.
ich bin eine Birne.
)
?>
|
|
| geschrieben von Klaush am 16.02.2009 - 09:16 |
Du könntest versuchen die bereits vorhandenen Steuerzeichen zu ersetzen und dann mittels der ersetzen Zeichen dein Array aufbauen.
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
|
<?
function test ($sz) {
// wenn kein Steuerzeichen uebergeben, dann \n
$stream = "Ich bin ein\tApfel.\nich bin eine\tBirne.";
switch($sz)
{
case 'n':
$new_sz = "n_n";
$stream = str_replace("\n", "n_n", $stream);
break;
case "t":
$new_sz = "t_t";
$stream = str_replace("\t", "t_t", $stream);
break;
}
echo 'gewähltes Steuerzeichen: '.$sz.'<br/>';
// Anwendung von explode () auf folgenden String
return explode ($new_sz, $stream);
} // test ()
?>
|
Anstelle des \n oder \t, habe ich ein einfaches n oder t genommen, als Beispiel sollte es mir reichen. Wie gesagt, es ist ein Lösungsansatz. |
|