PDA

Bekijk Volledige Versie : Tab-karakter verdwijnt na uploaden per formulier



Eduard Bekker
17/12/02, 14:56
Beste mensen!

Ik heb een php-scriptje gemaakt, dat een Excel-bestand, opgeslagen als
tab-gescheiden tekst bestand zo interpreteert en omzet naar HTML, dat er een
acceptabele tabel op de pagina staat. Het belangrijkste is hierbij dat de
tab ("\t") wordt omgezet naar </TD>\n\t\t<TD>.
Het staat op http://www.mobidisc.nl bij de accessoires.

Als ik dit bestand upload via ftp gaat alles goed.
Upload ik het echter via een formulier (input type='file') en uiteindelijk
via de copy-functie van php, dan vindt het phpscript de"\t"-string niet
meer. Dit is blijkbaar een ander karakter geworden.
Hoe kan ik hier e.e.a. weer op het rechte spoort krijgen?

--
----------------------
Groetjes,
Eduard
http://www.websitez.nl
----------------------

Maarten Wierda
17/12/02, 16:00
Eduard Bekker wrote:

> Ik heb een php-scriptje gemaakt, dat een Excel-bestand, opgeslagen als
> tab-gescheiden tekst bestand zo interpreteert en omzet naar HTML, dat er een
> acceptabele tabel op de pagina staat. Het belangrijkste is hierbij dat de
> tab ("\t") wordt omgezet naar </TD>\n\t\t<TD>.
> Het staat op http://www.mobidisc.nl bij de accessoires.
>
> Als ik dit bestand upload via ftp gaat alles goed.
> Upload ik het echter via een formulier (input type='file') en uiteindelijk
> via de copy-functie van php, dan vindt het phpscript de"\t"-string niet
> meer. Dit is blijkbaar een ander karakter geworden.
> Hoe kan ik hier e.e.a. weer op het rechte spoort krijgen?

<http://groups.google.com/groups?q=php+tab+character>

Het eerste draadje is meteen raak denk ik -> "It depends on the charset
you use."

Succes,

--
Cheers, Maarten Wierda

Eduard Bekker
17/12/02, 16:25
Op 17-12-2002 15:00, vertrouwde "Maarten Wierda" mij het volgende toe:

> Eduard Bekker wrote:
>
>> Ik heb een php-scriptje gemaakt, dat een Excel-bestand, opgeslagen als
>> tab-gescheiden tekst bestand zo interpreteert en omzet naar HTML, dat er een
>> acceptabele tabel op de pagina staat.
[knip]
>> Als ik dit bestand upload via ftp gaat alles goed.
>> Upload ik het echter via een formulier (input type='file') en uiteindelijk
>> via de copy-functie van php, dan vindt het phpscript de"\t"-string niet
>> meer. Dit is blijkbaar een ander karakter geworden.
>> Hoe kan ik hier e.e.a. weer op het rechte spoort krijgen?

> Het eerste draadje is meteen raak denk ik -> "It depends on the charset
> you use."
Nee, ik ben er inmiddels achter: het uploaden in php met 'copy' geschiedt
binair. En het moet als tekst. Ik kan nog niet vinden hoe dat moet...


--
----------------------
Groetjes,
Eduard
http://www.websitez.nl
----------------------

Maarten Wierda
17/12/02, 17:17
Eduard Bekker wrote:

> > Het eerste draadje is meteen raak denk ik -> "It depends on the charset
> > you use."
>
> Nee, ik ben er inmiddels achter: het uploaden in php met 'copy' geschiedt
> binair. En het moet als tekst. Ik kan nog niet vinden hoe dat moet...

<http://www.php.net/manual/en/features.file-upload.php>

Misschien met
<http://www.php.net/manual/en/function.move-uploaded-file.php>?

--
Cheers, Maarten Wierda

Jaap-Andre de Hoop
17/12/02, 17:18
In article <BA24F2B7.ED27%e.bekker@layout.nl>, Eduard Bekker <e.bekker@layout.nl> wrote:
>Op 17-12-2002 15:00, vertrouwde "Maarten Wierda" mij het volgende toe:
>
>> Eduard Bekker wrote:
>>
>>> Ik heb een php-scriptje gemaakt, dat een Excel-bestand, opgeslagen als
>>> tab-gescheiden tekst bestand zo interpreteert en omzet naar HTML, dat er een
>>> acceptabele tabel op de pagina staat.
>[knip]
>>> Als ik dit bestand upload via ftp gaat alles goed.
>>> Upload ik het echter via een formulier (input type='file') en uiteindelijk
>>> via de copy-functie van php, dan vindt het phpscript de"\t"-string niet
>>> meer.

>> Het eerste draadje is meteen raak denk ik -> "It depends on the charset
>> you use."

>Nee, ik ben er inmiddels achter: het uploaden in php met 'copy' geschiedt
>binair. En het moet als tekst. Ik kan nog niet vinden hoe dat moet...

lijkt me stug dat het daar aan ligt, verschil tussen binair en ascii is
eigenlijk alleen de regeleindes (toch?). Volgens mij kan php goed met
'verkeerde' regeleindes voor het OS omgaan. Tenzij je reguliere
expressies gebruikt die controleert op \r\n of juist \n om het eind van
de regel te bepalen, maar je kan iig beter gebruik maken van
http://www.php.net/manual/en/function.move-uploaded-file.php

en http://www.php.net/manual/en/features.file-upload.php
is misschien ook nuttige leesvoer.

Maar misschien kan je (relevante delen van) de source hier posten of
ergens neerzetten.

Jaap-Andre

Eduard Bekker
17/12/02, 17:47
Op 17-12-2002 16:18, vertrouwde "Jaap-Andre de Hoop" mij het volgende toe:

>>> Eduard Bekker wrote:
>>>
>>>> Ik heb een php-scriptje gemaakt, dat een Excel-bestand, opgeslagen als
>>>> tab-gescheiden tekst bestand zo interpreteert en omzet naar HTML, dat er
>>>> een
>>>> acceptabele tabel op de pagina staat.
>> [knip]
>> I ben er inmiddels achter: het uploaden in php met 'copy' geschiedt
>> binair. En het moet als tekst. Ik kan nog niet vinden hoe dat moet...
>
> lijkt me stug dat het daar aan ligt, verschil tussen binair en ascii is
> eigenlijk alleen de regeleindes (toch?). Volgens mij kan php goed met
> 'verkeerde' regeleindes voor het OS omgaan.
Ik heb het uitgetest en het ligt daar wel degelijk aan. Als ik met mijn
ftp-software upload als binair, herkent php de tab-karakter niet.
Die ik het als tekst, dan is er geen vuiltje aan de lucht.


----------------------
Groetjes,
Eduard
http://www.websitez.nl
----------------------

Jan Ehrhardt
17/12/02, 17:54
Eduard Bekker in nl.internet.www.server-side (Tue, 17 Dec 2002 15:47:57
GMT):

>>>>> Ik heb een php-scriptje gemaakt, dat een Excel-bestand, opgeslagen als
>>>>> tab-gescheiden tekst bestand zo interpreteert en omzet naar HTML, dat er
>>>>> een acceptabele tabel op de pagina staat.

>Ik heb het uitgetest en het ligt daar wel degelijk aan. Als ik met mijn
>ftp-software upload als binair, herkent php de tab-karakter niet.
>Die ik het als tekst, dan is er geen vuiltje aan de lucht.

Dat zou toch gewoon op te lossen moeten zijn door na het lezen van een
regel van het CSV-bestand (met fgets) wat replaces uit te voeren op \r\n of
\n\r.

Jan
--
Dropdown and pushup menu's - http://cgi.monitor.nl/cbt/web.htm

Jaap-Andre de Hoop
17/12/02, 18:01
In article <BA2505F7.ED2C%e.bekker@layout.nl>, Eduard Bekker <e.bekker@layout.nl> wrote:
>Op 17-12-2002 16:18, vertrouwde "Jaap-Andre de Hoop" mij het volgende toe:
>
>>>> Eduard Bekker wrote:
>>>>
>>>>> Ik heb een php-scriptje gemaakt, dat een Excel-bestand, opgeslagen als
>>>>> tab-gescheiden tekst bestand zo interpreteert en omzet naar HTML, dat er
>>>>> een
>>>>> acceptabele tabel op de pagina staat.
>>> [knip]
>>> I ben er inmiddels achter: het uploaden in php met 'copy' geschiedt
>>> binair. En het moet als tekst. Ik kan nog niet vinden hoe dat moet...
>>
>> lijkt me stug dat het daar aan ligt, verschil tussen binair en ascii is
>> eigenlijk alleen de regeleindes (toch?). Volgens mij kan php goed met
>> 'verkeerde' regeleindes voor het OS omgaan.
>Ik heb het uitgetest en het ligt daar wel degelijk aan. Als ik met mijn
>ftp-software upload als binair, herkent php de tab-karakter niet.
>Die ik het als tekst, dan is er geen vuiltje aan de lucht.
>

kleine correctie herkent jouw php-code het tabkarakter niet.
Als ik:

<?php

$fp=fopen ("tab_asci.txt",r);
$temp=fgetcsv($fp, 100, "\t");
print_r($temp);
?>

waarbij ik tab_asci in ascii (text) formaat heb geftp (ws_ftp le
windows -> linux) herkent hij keurig 3 velden en met tab_bin.txt (binair
geftp) herkent ie ook keurig drie velden in de regel
veld1 veld2 veld3
waarbij witruimte tussen de verschillende velden uiteraard een tab is.

Vandaar mijn vraag om jouw code te posten/neer te zetten.

Jaap-Andre

Eduard Bekker
17/12/02, 18:15
Op 17-12-2002 16:54, vertrouwde "Jan Ehrhardt" mij het volgende toe:

> Eduard Bekker in nl.internet.www.server-side (Tue, 17 Dec 2002 15:47:57
> GMT):
>
>>>>>> Ik heb een php-scriptje gemaakt, dat een Excel-bestand, opgeslagen als
>>>>>> tab-gescheiden tekst bestand zo interpreteert en omzet naar HTML, dat er
>>>>>> een acceptabele tabel op de pagina staat.
>
>> Ik heb het uitgetest en het ligt daar wel degelijk aan. Als ik met mijn
>> ftp-software upload als binair, herkent php de tab-karakter niet.
>> Die ik het als tekst, dan is er geen vuiltje aan de lucht.
>
> Dat zou toch gewoon op te lossen moeten zijn door na het lezen van een
> regel van het CSV-bestand (met fgets) wat replaces uit te voeren op \r\n of
> \n\r.
Het gaat niet om de regeleinden, maar om de tabs!
--
----------------------
Groetjes,
Eduard
http://www.websitez.nl
----------------------

Eduard Bekker
17/12/02, 18:18
Op 17-12-2002 17:01, vertrouwde "Jaap-Andre de Hoop" mij het volgende toe:

> In article <BA2505F7.ED2C%e.bekker@layout.nl>, Eduard Bekker
> <e.bekker@layout.nl> wrote:
>> Op 17-12-2002 16:18, vertrouwde "Jaap-Andre de Hoop" mij het volgende toe:
>>
>>>>> Eduard Bekker wrote:
>>>>>
>>>>>> Ik heb een php-scriptje gemaakt, dat een Excel-bestand, opgeslagen als
>>>>>> tab-gescheiden tekst bestand zo interpreteert en omzet naar HTML, dat er
>>>>>> een
>>>>>> acceptabele tabel op de pagina staat.
>>>> [knip]
>>>> I ben er inmiddels achter: het uploaden in php met 'copy' geschiedt
>>>> binair. En het moet als tekst. Ik kan nog niet vinden hoe dat moet...
>>>
>>> lijkt me stug dat het daar aan ligt, verschil tussen binair en ascii is
>>> eigenlijk alleen de regeleindes (toch?). Volgens mij kan php goed met
>>> 'verkeerde' regeleindes voor het OS omgaan.
>> Ik heb het uitgetest en het ligt daar wel degelijk aan. Als ik met mijn
>> ftp-software upload als binair, herkent php de tab-karakter niet.
>> Die ik het als tekst, dan is er geen vuiltje aan de lucht.
>>
>
> kleine correctie herkent jouw php-code het tabkarakter niet.
> Als ik:
>
> <?php
>
> $fp=fopen ("tab_asci.txt",r);
> $temp=fgetcsv($fp, 100, "\t");
> print_r($temp);
> ?>
>
> waarbij ik tab_asci in ascii (text) formaat heb geftp (ws_ftp le
> windows -> linux) herkent hij keurig 3 velden en met tab_bin.txt (binair
> geftp) herkent ie ook keurig drie velden in de regel
> veld1 veld2 veld3
> waarbij witruimte tussen de verschillende velden uiteraard een tab is.
>
> Vandaar mijn vraag om jouw code te posten/neer te zetten.
Bij deze:
<BR>

<?php
$tabel=false;
$alleaccessoires=join("",
file("http://www.layout.nl/phpscriptsextern/mobidisc/accessoires/prijslijst.
txt"));
$alleaccessoires=str_replace(chr(9) , "\t" , $alleaccessoires);


//tweede kolom verwijderen
$regels=explode("\n",$alleaccessoires);
foreach($regels as $regel)
{
$tabje=explode("\t",$regel);

$samenvoegen=$tabje[0]."\t".$tabje[1]."\t".$tabje[2]."\t".$tabje[3]."\t".$ta
bje[4]."\n";
$allessamen=$allessamen.$samenvoegen;
}
$alleaccessoires=$allessamen;

//echo $alleaccessoires;

//euroteken invoeren.
$alleaccessoires=str_replace("§" , "<IMG SRC='/illustraties/euro.gif' ALT=''
WIDTH='7' HEIGHT='8' BORDER='0'>" , $alleaccessoires);
$alleaccessoires=str_replace("€" , "<IMG SRC='/illustraties/euro.gif' ALT=''
WIDTH='7' HEIGHT='8' BORDER='0'>" , $alleaccessoires);
$alleaccessoires=str_replace(" <IMG" , "<IMG" , $alleaccessoires);

$regels=explode("\n",$alleaccessoires);
foreach($regels as $regel)
{
$regelnummer=$regelnummer+1;
if ($regelnummer == 1)
{
$regel=str_replace("\t" , "" , $regel);
$regel="<P><B class='hoofdkop'>".$regel."</B></P>\n\n";
$regel=$regel."<TABLE BORDER='0' CELLSPACING='0'
CELLPADDING='0'>\n\t<TR>\n\t\t<TD>";
$tabel=true;
}
if (strstr($regel,"Op alle accessoires"))
{
$regel="</TD></TR></TABLE><BR><BR>\n\n<span class='p10'>".$regel;
$tabel=false;
}
if (($tabel) && ($regelnummer > 1))
{
$regel=str_replace("\t" , "</TD>\n\t\t<TD>&nbsp;" , $regel);
if (strstr($regel,"euro.gif"))
{
$regel=str_replace("<TD>&nbsp;<IMG SRC" , "<TD
align='right'>&nbsp;<IMG SRC" , $regel);
}
$regel=str_replace("Accu's" , "<B>Accu’s</B>" , $regel);
$regel=str_replace("<TD>&nbsp; Adviespr." , "<TD
align='right'>&nbsp;Adviespr." , $regel);
$regel=str_replace("Adviespr. " , "Adviespr." , $regel);
$regel=str_replace("Adviespr." , "<B>Adviespr.</B>" , $regel);
$regel=str_replace("<TD>&nbsp;Nu</TD>" , "<TD
align='right'>&nbsp;<B>Nu</B>&nbsp;</TD>" , $regel);
$regel=str_replace("<TD>&nbsp;Tijdelijk</TD>" , "<TD
align='right'>&nbsp;<B>Tijdelijk</B>&nbsp;</TD>" , $regel);
}
if (!$tabel)
{
$regel=$regel."<BR>\n";
}
else
{
$regel=$regel."</TD></TR>\n\t<TR>\n\t\t<TD>";
}
$lijst=$lijst.$regel;
}

$lijst=$lijst."</span>";

echo $lijst;

?>




--
----------------------
Groetjes,
Eduard
http://www.websitez.nl
----------------------

Jan Ehrhardt
17/12/02, 18:52
Eduard Bekker in nl.internet.www.server-side (Tue, 17 Dec 2002 16:18:28
GMT):

>> Vandaar mijn vraag om jouw code te posten/neer te zetten.
>
>Bij deze:
>
>$tabel=false;
>$alleaccessoires=join("",
>file("http://www.layout.nl/phpscriptsextern/mobidisc/accessoires/prijslijst.
>txt"));
>$alleaccessoires=str_replace(chr(9) , "\t" , $alleaccessoires);

Waarom doe je dit? chr(9) is toch al \t?

>//tweede kolom verwijderen
>$regels=explode("\n",$alleaccessoires);

Hier zou dus een probleem kunnen liggen. Ik zou dit vooraf laten gaan door
wat regels zoals:

$alleaccessoires = ereg_replace("\r\n", "\n", $alleaccessoires);
$alleaccessoires = ereg_replace("\n\r", "\n", $alleaccessoires);
$alleaccessoires = ereg_replace("\r", "\n", $alleaccessoires);

en kijken of het dan nog steeds niet werkt.

Jan


--
Dropdown and pushup menu's - http://cgi.monitor.nl/cbt/web.htm

Eduard Bekker
17/12/02, 19:12
Op 17-12-2002 17:52, vertrouwde "Jan Ehrhardt" mij het volgende toe:

> Eduard Bekker in nl.internet.www.server-side (Tue, 17 Dec 2002 16:18:28
> GMT):
>
>>> Vandaar mijn vraag om jouw code te posten/neer te zetten.
>>
>> Bij deze:
>>
>> $tabel=false;
>> $alleaccessoires=join("",
>> file("http://www.layout.nl/phpscriptsextern/mobidisc/accessoires/prijslijst.
>> txt"));
>> $alleaccessoires=str_replace(chr(9) , "\t" , $alleaccessoires);
>
> Waarom doe je dit? chr(9) is toch al \t?
Slaat inderdaad nergens op! Was een van de vele probeerselen.
>> //tweede kolom verwijderen
>> $regels=explode("\n",$alleaccessoires);
>
> Hier zou dus een probleem kunnen liggen. Ik zou dit vooraf laten gaan door
> wat regels zoals:
>
> $alleaccessoires = ereg_replace("\r\n", "\n", $alleaccessoires);
> $alleaccessoires = ereg_replace("\n\r", "\n", $alleaccessoires);
> $alleaccessoires = ereg_replace("\r", "\n", $alleaccessoires);
Het werkt nu inderdaad wel! Een wonder is geschied! Ik heb het blijkbaar
over een hele verkeerde boeg lopen zoeken!

Dat er problemen kunnen zijn met het einde-regel teken, wist ik alvan tekst,
die per formulier wordt aangelever, maar daar had ik het nu niet gezocht.
De oplossing daarvoor kreeg ik ooit in de vorm:
$alleaccessoires =
preg_replace("/(\015\012)|(\015)|(\012)/","<BR>\n",$alleaccessoires);
Waarvan ik het fijne overigens niet begrijp (12 en 15 zijn toch geen
ascii-codes voor linefeed en carriadge-return?)
--
----------------------
Groetjes,
Eduard
http://www.websitez.nl
----------------------

Edwin Martin
18/12/02, 01:08
Eduard Bekker wrote:

> Dat er problemen kunnen zijn met het einde-regel teken, wist ik alvan tekst,
> die per formulier wordt aangelever, maar daar had ik het nu niet gezocht.
> De oplossing daarvoor kreeg ik ooit in de vorm:
> $alleaccessoires =
> preg_replace("/(\015\012)|(\015)|(\012)/","<BR>\n",$alleaccessoires);
> Waarvan ik het fijne overigens niet begrijp (12 en 15 zijn toch geen
> ascii-codes voor linefeed en carriadge-return?)

015 en 012 zijn octale getallen; 1*8+5=13 (CR) en 1*8+2=10 (LF).

Je zou het voor de duidelijk ook weer zo kunnen schrijven:

preg_replace( "/(\r\n)|(\r)|(\n)/", "<BR>\n", $alleaccessoires );

(En voortaan niet zo eigenwijs zijn ;-)

Groeten,
Edwin Martin
http://www.bitstorm.org/edwin/

Eduard Bekker
18/12/02, 21:24
Op 18-12-2002 00:08, vertrouwde "Edwin Martin" mij het volgende toe:

> Eduard Bekker wrote:
>
>> Dat er problemen kunnen zijn met het einde-regel teken, wist ik alvan tekst,
>> die per formulier wordt aangelever, maar daar had ik het nu niet gezocht.
>> De oplossing daarvoor kreeg ik ooit in de vorm:
>> $alleaccessoires =
>> preg_replace("/(\015\012)|(\015)|(\012)/","<BR>\n",$alleaccessoires);
>> Waarvan ik het fijne overigens niet begrijp (12 en 15 zijn toch geen
>> ascii-codes voor linefeed en carriadge-return?)
>
> 015 en 012 zijn octale getallen; 1*8+5=13 (CR) en 1*8+2=10 (LF).
>
> Je zou het voor de duidelijk ook weer zo kunnen schrijven:
>
> preg_replace( "/(\r\n)|(\r)|(\n)/", "<BR>\n", $alleaccessoires );
>
> (En voortaan niet zo eigenwijs zijn ;-)
Ikke, eigenwijs? Tot in de eeuwigheid!

--
----------------------
Groetjes,
Eduard
http://www.websitez.nl
----------------------

Jaap-Andre de Hoop
19/12/02, 12:26
>http://www.bitstorm.org/edwin/

game of live ziet er leuk uit, als je nog aanvult wil programmeren
daarin: kleurtjes:
of een enkele kleur instellen
of kleur die samenhangt met levensduur, jong dan lichte kleur, hoe ouder,
hoe donkerder
of beide ;-)