[php] Vreemde teksens uit string verwijderen

Pagina: 1
Acties:
  • 423 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Hallo,

Ik ben bezig met een script dat Excel bestanden maakt van gegevens uit een database. Dit gaat goed tot ik één bepaald veld gebruik. In dit veld staan meestal elle lange teksten. Deze worden rechtstreeks gekopieerd uit bijv. Word.

Ik heb het vermoeden dat er tekens in zitten die het Excel bestand corrupt maken. Nu wil ik de tekst uit dat foute veld filteren zodat er alleen [a-z][A-Z][0-9] en \n \r \t, enz. dus, de gebruikelijke tekens.

Zoveel weet ik niet van regexp maar hier doe ik een gok:
PHP:
1
2
3
4
5
$corruptestring = $row->lange_tekst;

$corruptestring = preg_replace("!([a-z][A-Z]\\r\\n\\t)", '', $corruptestring);

echo $corruptestring;

Zoals jullie waarschijnlijk zelf ook wel zien klopt hier helemaal niets van. Ik ben dan ook een noob wat regexp betreft.

Kan iemand mij vertellen hoe het wel moet?

Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
functie trim :?

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Nope, die verwijderd alleen teveel spaties en cr's e.d. (tenminste...)

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Trim haalt slechts enters en spaties aan begin en einde van de string weg. Heeft de TS al gekeken op de PHP site?

http://php.net/preg_replace
http://nl2.php.net/manual/nl/pcre.pattern.syntax.php

Dan moet je er wel uitkomen dunkt mij :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Ik heb gekeken... sorry... ik kom er echt niet uit...

Acties:
  • 0 Henk 'm!

Verwijderd

$string = preg_replace ( '/[^a-zA-Z0-9\r\n\t ]+/', '', $string );

Gewoon even goed een regex tutorial erbij houden, en goed naar de syntax kijken. De plus staat er omdat ik denk dat de regex er iets efficiënter van wordt.

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Wat je dus wilt doen is alles wat niet ([a-z][A-Z][0-9] of \n \r \t) is; vervangen door niets....

Wat is de error die je nu dan krijgt? Verder valt het je niet op dat de handleidingen allemaal de volgende constructie gebruiken?
$pattern = "/blabla/";
:?

[ Voor 10% gewijzigd door Spider.007 op 19-09-2003 19:25 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Verdorie! Het wil niet lukken! Ik probeer met excelgen (gebaseerd op psxlsgen) een Excel bestand te genereren. En ik heb het vermoeden dat hij vast loopt op bepaalde velden. Kan iemand hier wat uit op maken:
PHP:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
    /* 
     * @version V1.0 2002/July/18 (c) Erh-Wen,Kuo (erhwenkuo@yahoo.com). All rights reserved.
     * Released under both BSD license and Lesser GPL library license. 
     * Whenever there is any discrepancy between the two licenses, 
     * the BSD license will take precedence. 
     *
     * purpose: This class is used to generate simple MS Excel file (xls) via
     * PHP & stream to user's browser.
     * Credits: This class is based on Erol Ozcan's psxlsgen
     *          Excel library functions.
     */

    class  ExcelGen {
          var  $excel_data;         // a buffer for store excel stream data
          var  $excel_filename;     // excel filename
      

         // Default constructor
         function  ExcelGen($excel_filename='excelgen',$excel_wksheetname='david')
         {
        $this->excel_data="";                    // a buffer for store excel stream data
        $this->excel_filename=$excel_filename;       // excel filename
    
        $this->ExcelStart();
         }
     
         // start of the excel file
         function ExcelStart()
         {
            // start of excel file header
            $this->excel_data = pack( "vvvvvv", 0x809, 0x08, 0x00,0x10, 0x0, 0x0 );
             }
     
         // end of the excel file
         function ExcelEnd()
         {
           $this->excel_data .= pack( "vv", 0x0A, 0x00 );
         }

         // write a Number (double) into cell(row, col)
         function WriteNumber( $row, $col, $value )
         {
            $this->excel_data .= pack( "vvvvv", 0x0203, 14, $row, $col, 0x00 );
            $this->excel_data .= pack( "d", $value );
         }

         // write a text into cell(Row,Col)
         function WriteText( $row, $col, $value )
         {
            $len = strlen( $value );
            $this->excel_data .= pack( "v*", 0x0204, 8 + $len, $row, $col, 0x00, $len );
            $this->excel_data .= $value;
         }
     
         // send generated xls as stream file
         function SendFile()
         {
            //Close Excel File         
            $this->ExcelEnd();
            header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT");
            header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
            header ( "Pragma: no-cache" );
            header ( "Content-type: application/octet-stream; name=$this->excel_filename.xls" );
            header ( "Content-Disposition: attachment; filename=$this->excel_filename.xls"); 
            header ( "Content-Description: PHP ExcelGen Class" );
            print $this->excel_data;
         }

    } // end of the class ExcelGen() class
?>

en dit een stuk van de code die ik gebruik:
PHP:
1
2
3
$inhoud = mysql_result($res_que, 0, 'answer_value');
$inhoud = preg_replace('/[^a-zA-Z0-9\r\n\t]+/', ' ', $inhoud);
$werkblad->WriteText($regel_nummer, $j, $inhoud);

Weet iemand misschien waar het aan kan liggen?

Acties:
  • 0 Henk 'm!

  • sebas
  • Registratie: April 2000
  • Laatst online: 03-09 12:51
Probeer eens voor jezelf de regex die je hebt op te splitsen in verschillende onderdelen, zoals a-z bijvoorbeeld, leg dan aan jezelf (en als je er niet uitkomt aan ons) uit wat precies elk teken in je regex moet doen. Vaak kom je er dan vanzelf al achter wat er nog mist. Reguliere expressies bouwen vereist veel concentratie op details en aan het begin zeker ook een bepaalde mate aan uithoudingsvermogen. De PCRE pagina's op php.net zijn trouwens ook een goede bron voor informatie.

Voor de rest zou je natuurlijk wat meer kunnen debuggen, je zegt dat het op bepaalde tekens misgaat, wat zo 1-2-3 in mij opkomt is dat bijvoorbeeld het scheidingsteken vaker niet altijd even vaak in elke regel (unescaped) voorkomt. Als je erachter kunt komen met welke velden, en vooral wat misgaat ben je al een heel stuk verder, onafhankelijk van je regex.

Everyone complains of his memory, no one of his judgement.


  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Zoals in de eerste post staat, gaat het mis in een veld met veel tekst. Bij welke rij het nou mis gaat kan ik niet zien want Excel geeft een fout "Kan bestand niet openen" maar hij geeft niet aan op welke rij zodat ik had kunnen zien welke vreemde karakters er in voor komen. Ik heb de PERL regexp documentatie al naast me liggen maar daar kan ik ook niet veel wijzer van worden...

  • sebas
  • Registratie: April 2000
  • Laatst online: 03-09 12:51
Naja, mijn tips net hierboven hielden ook niet alleen lezen in. Doe eens wat erin staat en je komt er misschien zelf wel uit.

Gokken wil hier toch niemand, en op het moment dat je zelf niet eens kunt aangeven wat misgaat (nee, "excel kannum nie openeh!" telt niet mee) zul je hier weinig hulp vinden. Niemand hier die ff je code wil fixen omdat jij dat zelf niet kunt. Je zult het zelf moeten doen, eventueel met tips van anderen.

Everyone complains of his memory, no one of his judgement.


  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 22:13

pietje63

RTFM

kun je ipv xslgen niet makkelijker gebruik maken van csv bestanden? debugged ook makkelijker.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Klopt, ik heb even een cvs genereer class geschreven en dat werkt net zo lekker als het al niet lekkerder werkt.

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
sebas schreef op 20 September 2003 @ 15:26:
Naja, mijn tips net hierboven hielden ook niet alleen lezen in. Doe eens wat erin staat en je komt er misschien zelf wel uit.

Gokken wil hier toch niemand, en op het moment dat je zelf niet eens kunt aangeven wat misgaat (nee, "excel kannum nie openeh!" telt niet mee) zul je hier weinig hulp vinden. Niemand hier die ff je code wil fixen omdat jij dat zelf niet kunt. Je zult het zelf moeten doen, eventueel met tips van anderen.
Met die tips van anderen had ik het ook willen doen... tuurlijk is het mooi als anderen het doen, maar daar leer je niet veel van. Ik had wel graag de goede richting gestuurd willen worden (wat ook wel gebeurd is)
Pagina: 1