[PHP]Problemen met vervangen spaties

Pagina: 1
Acties:

Onderwerpen


  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Ik ben bezig met een systeempje om webbased onze DNS te beheren, maar loop tegen een hardnekkig probleem aan waar ik maar geen oplossing voor kan vinden.

Ik moet een stel spaties vervangen door 1 enkele tab (mensen hebben hier altijd handmatig dns tekstbestanden moeten invullen. Voor de uitlijning hebben sommige tabs gebruikt en anderen weer spaties-> probleem dus..).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    [21] => Array
        (
            [0] => localhost
            [1] => 
            [2] => 
            [3] => 
            [4] => 
            [5] => 
            [6] => 
            [7] => IN
            [8] => 
            [9] => 
            [10] => 
            [11] => 
            [12] => 
            [13] => A
            [14] => 
            [15] => 
            [16] => 
            [17] => 
            [18] => 
            [19] => 
            [20] => 127.0.0.1
        )

Zoals je ziet staan er gewoon spaties bij (explode op spaties in dit geval). Het zijn gewoon ASCII 32 spaties. Ik krijg het maar niet voor elkaar om ze weg te krijgen :X 8)7
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
        if(count($dns[$i]) == 1)
            {

            $tempVAR = $dns[$i][0];
            //unset($dns[$i][0]);
            //$tempVAR = preg_replace('![ ]+!',chr(9),$tempVAR);
            //$tempVAR = trim($tempVAR);
            $dns[$i] = str_replace(chr(32),"hoi",$dns[$i]);
            $dns[$i] = explode(chr(32),$tempVAR);


        }

Het enige wat hier dus wel werkt is die explode op chr(32). Hoe kan het dat een str_replace op hetzelfde karakter erboven niets doet? :X

Ik heb echt al van alles geprobeerd:
[rml][ php] meerdere spaties vervangen door 1[/rml]
[rml][ PHP] eregi_replace serie spaties > 1 spatie[/rml]

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Verwijderd

Probeer eens

str_replace(" ", "", $string)

  • Equator
  • Registratie: April 2001
  • Laatst online: 09-09 15:29

Equator

Crew Council

#whisky #barista

Kan je de spaties / whitespace niet gewoon trimmen en de correcte whitespace toevoegen.. :?
http://nl3.php.net/trim

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Dat is het rare dus :D
Zelfs dit werkt niet:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
        if(count($dns[$i]) == 1)
            {

            $tempVAR = $dns[$i][0];
            //unset($dns[$i][0]);
            //$tempVAR = preg_replace('![ ]+!',chr(9),$tempVAR);
            //$tempVAR = trim($tempVAR);
            $dns[$i] = trim($dns[$i]);
            $dns[$i] = str_replace(" ","",$dns[$i]);
            $dns[$i] = explode(chr(32),$tempVAR);


        }

Flabbergasted 8)7

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Trim haalt alleen spaties voor en/of achter de string weg. Waarom doe je niet zoiets?
PHP:
1
$dns[$i] = preg_replace("/\s+/", "\t", $dns[$i]);

Dat zou, als het goed is, alle meervoudige spaties door een enkele tab moeten vervangen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Kan je niet iets met een regular expression doen?

dus zoiets
PHP:
1
$str = preg_replace('/\s+/', '\t', $str);


Ik weet niet of hij zo goed werkt maar anders moet je eens naar greedy / non-greedy kijken

edit:

te laat

[ Voor 18% gewijzigd door Woy op 15-12-2005 11:47 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

-NMe- schreef op donderdag 15 december 2005 @ 11:27:
Trim haalt alleen spaties voor en/of achter de string weg. Waarom doe je niet zoiets?
PHP:
1
$dns[$i] = preg_replace("/\s+/", "\t", $dns[$i]);

Dat zou, als het goed is, alle meervoudige spaties door een enkele tab moeten vervangen. :)
Je kan toch ook gewoon split gebruiken ipv van explode?

En dan split je op tab of meerdere spaties

Programmer - an organism that turns coffee into software.


  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

Ehm, je doet alleen je explode op $tempVAR, de rest gebruikt $dns[$i]. :Z

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Ik heb nu dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
        if(count($dns[$i]) == 1)
            {

            $tempVAR = $dns[$i][0];
            //unset($dns[$i][0]);
            //$tempVAR = preg_replace('![ ]+!',chr(9),$tempVAR);
            //$tempVAR = trim($tempVAR);
            $dns[$i] = preg_replace("/\s+/", "\t", $dns[$i]); 
            $dns[$i] = explode(chr(32),$tempVAR);


        }

En nog steeds spaties..overigens gebruik ik wel de html tag <PRE>. Die voegt ook extra spaties toe maar ze zijn er ook zonder PRE.

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Glashelder schreef op donderdag 15 december 2005 @ 11:41:
Ik heb nu dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
        if(count($dns[$i]) == 1)
            {

            $tempVAR = $dns[$i][0];
            //unset($dns[$i][0]);
            //$tempVAR = preg_replace('![ ]+!',chr(9),$tempVAR);
            //$tempVAR = trim($tempVAR);
            $dns[$i] = preg_replace("/\s+/", "\t", $dns[$i]); 
            $dns[$i] = explode(chr(32),$tempVAR);


        }

En nog steeds spaties..overigens gebruik ik wel de html tag <PRE>. Die voegt ook extra spaties toe maar ze zijn er ook zonder PRE.
print $dns[ $i ] eens voor en na de preg_replace. Als het goed is zou deze alle sequences van spaties moeten vervangen voor een tab.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Glashelder schreef op donderdag 15 december 2005 @ 11:41:
Ik heb nu dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
        if(count($dns[$i]) == 1)
            {

            $tempVAR = $dns[$i][0];
            //unset($dns[$i][0]);
            //$tempVAR = preg_replace('![ ]+!',chr(9),$tempVAR);
            //$tempVAR = trim($tempVAR);
            $dns[$i] = preg_replace("/\s+/", "\t", $dns[$i]); 
            $dns[$i] = explode(chr(32),$tempVAR);


        }

En nog steeds spaties..overigens gebruik ik wel de html tag <PRE>. Die voegt ook extra spaties toe maar ze zijn er ook zonder PRE.
PHP:
1
2
3
4
5
6
7
8
9
        if(count($dns[$i]) == 1)
            {

            $tempVAR = $dns[$i][0];
            //unset($dns[$i][0]);
            //$tempVAR = preg_replace('![ ]+!',chr(9),$tempVAR);
            //$tempVAR = trim($tempVAR);
            $dns[$i] = split("/\t|\s+/", "\t", $dns[$i]); 
        }


Wat gebeurt als je dit doet?

Heb je anders misschien een demo wat we kunnen zien? En een voorbeeld van $dns voordat je explode?

Programmer - an organism that turns coffee into software.


  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
PHP:
1
2
3
4
5
6
7
            $tempVAR = array();
            $tempVAR = $dns[$i][0];
            print_r($dns[$i]);
            $tempVAR = preg_replace("/\s+/", "\t", $dns[$i]); 
            echo "<br>";
            print_r($dns[$i]);
            $dns[$i] = explode(chr(32),$tempVAR);

code:
1
2
Array ( [0] => localhost IN A 127.0.0.1 ) 
Array ( [0] => localhost IN A 127.0.0.1 )

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

* eghie heeft zo'n gevoel dat dit beter werkt:
PHP:
1
2
3
4
5
6
7
8
9
10
        if(count($dns[$i]) == 1)
        {

            $tempVAR = $dns[$i][0];
            //unset($dns[$i][0]);
            //$tempVAR = preg_replace('![ ]+!',chr(9),$tempVAR);
            //$tempVAR = trim($tempVAR);
            $dns[$i] = preg_replace("/\s+/", "\t", $dns[$i]); 
            $dns[$i] = explode(chr(32),$dns[$i]);
        }

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
LuCarD schreef op donderdag 15 december 2005 @ 11:51:
[...]


PHP:
1
2
3
4
5
6
7
8
9
        if(count($dns[$i]) == 1)
            {

            $tempVAR = $dns[$i][0];
            //unset($dns[$i][0]);
            //$tempVAR = preg_replace('![ ]+!',chr(9),$tempVAR);
            //$tempVAR = trim($tempVAR);
            $dns[$i] = split("/\t|\s+/", "\t", $dns[$i]); 
        }


Wat gebeurt als je dit doet?

Heb je anders misschien een demo wat we kunnen zien? En een voorbeeld van $dns voordat je explode?
Dan staat er:
code:
1
2
3
4
    [21] => Array
        (
            [0] => Array
        )


print_r van $dns:
Array ( [10] => Array ( [0] => @ [1] => [2] => IN [3] => NS [4] => ns1.hoi.net. ) [11] => Array ( [0] => @ [1] => [2] => IN [3] => NS [4] => ns2.hoi.net. ) [12] => Array ( [0] => @ [1] => [2] => IN [3] => MX [4] => 10 [5] => smtp ) [13] => Array ( [0] => @ [1] => [2] => IN [3] => MX [4] => 20 [5] => mx1.hoi.net. ) [14] => Array ( [0] => www [1] => [2] => IN [3] => A [4] => xx.xx.xx.xx ) [15] => Array ( [0] => ftp [1] => [2] => IN [3] => A [4] => xx.xx.xx.xx ) [16] => Array ( [0] => mail [1] => [2] => IN [3] => A [4] => xx.xx.xx.xxx ) [17] => Array ( [0] => smtp [1] => [2] => IN [3] => A [4] => xx.xx.xx.xxx ) [18] => Array ( [0] => webmail [1] => [2] => IN [3] => A [4] => xx.xx.xx.x ) [19] => Array ( [0] => ;dev [1] => [2] => IN [3] => A [4] => xx.xx.xxx.xx ) [20] => Array ( [0] => ;extranet [1] => IN [2] => A [3] => xxx.xxx.xxx.xxx ) [21] => Array ( [0] => localhost IN A 127.0.0.1 ) )
met PRE (leesbaar ;))
code:
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Array
(
    [10] => Array
        (
            [0] => @
            [1] => 
            [2] => IN
            [3] => NS
            [4] => ns1.hoi.net.
        )

    [11] => Array
        (
            [0] => @
            [1] => 
            [2] => IN
            [3] => NS
            [4] => ns2.hoi.net.
        )

    [12] => Array
        (
            [0] => @
            [1] => 
            [2] => IN
            [3] => MX
            [4] => 10
            [5] => smtp
        )

    [13] => Array
        (
            [0] => @
            [1] => 
            [2] => IN
            [3] => MX
            [4] => 20
            [5] => mx1.hoi.net.
        )

    [14] => Array
        (
            [0] => www
            [1] => 
            [2] => IN
            [3] => A
            [4] => xx.xx.xx.xx
        )

    [15] => Array
        (
            [0] => ftp
            [1] => 
            [2] => IN
            [3] => A
            [4] => xx.xx.xx.xx
        )

    [16] => Array
        (
            [0] => mail
            [1] => 
            [2] => IN
            [3] => A
            [4] => xx.xx.xx.xx
        )

    [17] => Array
        (
            [0] => smtp
            [1] => 
            [2] => IN
            [3] => A
            [4] => xx.xx.xx.xx
        )

    [18] => Array
        (
            [0] => webmail
            [1] => 
            [2] => IN
            [3] => A
            [4] => xx.xx.xx.xx
        )

    [19] => Array
        (
            [0] => ;dev
            [1] => 
            [2] => IN
            [3] => A
            [4] => xx.xx.xx.xx
        )

    [20] => Array
        (
            [0] => ;extranet
            [1] => IN
            [2] => A
            [3] => xx.xx.xx.xx
        )

    [21] => Array
        (
            [0] => localhost       IN      A       127.0.0.1
        )

)
eghie schreef op donderdag 15 december 2005 @ 11:56:
* eghie heeft zo'n gevoel dat dit beter werkt:
PHP:
1
2
3
4
5
6
7
8
9
10
        if(count($dns[$i]) == 1)
        {

            $tempVAR = $dns[$i][0];
            //unset($dns[$i][0]);
            //$tempVAR = preg_replace('![ ]+!',chr(9),$tempVAR);
            //$tempVAR = trim($tempVAR);
            $dns[$i] = preg_replace("/\s+/", "\t", $dns[$i]); 
            $dns[$i] = explode(chr(32),$dns[$i]);
        }
Dan krijg ik hetzelfde als in een eerdere reactie:
code:
1
2
3
4
    [21] => Array
        (
            [0] => Array
        )

[ Voor 18% gewijzigd door Glashelder op 15-12-2005 12:07 ]

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

LuCarD schreef op donderdag 15 december 2005 @ 11:29:
Je kan toch ook gewoon split gebruiken ipv van explode?

En dan split je op tab of meerdere spaties
Ik had er even overheen gekeken dat de zut juist geëxplode moest worden. :P split is dan inderdaad beter. :)
Glashelder schreef op donderdag 15 december 2005 @ 12:04:
Dan krijg ik hetzelfde als in een eerdere reactie:
code:
1
2
3
4
    [21] => Array
        (
            [0] => Array
        )
Logisch. Eerst ga je alle spaties door tabs vevangen, en dan wil je exploden op spaties. Niet gek dat het dan niet werkt. ;)

[ Voor 37% gewijzigd door NMe op 15-12-2005 12:11 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Glashelder schreef op donderdag 15 december 2005 @ 12:04:
...

[...]
Dan krijg ik hetzelfde als in een eerdere reactie:
code:
1
2
3
4
    [21] => Array
        (
            [0] => Array
        )
Hmm, ik zie het ja. Probeer dit eens:
PHP:
1
2
3
4
5
6
7
8
9
10
if(count($dns[$i]) == 1)
        {

            $tempVAR = $dns[$i][0];
            //unset($dns[$i][0]);
            //$tempVAR = preg_replace('![ ]+!',chr(9),$tempVAR);
            //$tempVAR = trim($tempVAR);
            $dns[$i] = preg_replace("/\s+/", "\t", $tempVAR); 
            $dns[$i] = split("\t",$dns[$i]);
        }
-NMe- schreef op donderdag 15 december 2005 @ 12:09:
[...]

Ik had er even overheen gekeken dat de zut juist geëxplode moest worden. :P split is dan inderdaad beter. :)

[...]

Logisch. Eerst ga je alle spaties door tabs vevangen, en dan wil je exploden op spaties. Niet gek dat het dan niet werkt. ;)
Mjah, ik ging er even gemakshalve vanuit dat die chr(32) een tab was. ;) Maar voor tab moet je geloof ik chr(9) hebben.

[ Voor 43% gewijzigd door eghie op 15-12-2005 12:33 ]


  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
PHP:
1
2
3
4
5
6
7
    [21] => Array
        (
            [0] => localhost
            [1] => IN
            [2] => A
            [3] => 127.0.0.1
        )


:D Thx. Ik zit hier dus echt al een dag te klooien :D

Iedereen heel erg bedankt voor de moeite :) Afbeeldingslocatie: http://forum.fok.nl/i/s/thumbsup.gif

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Dat is sneller te doen lijkt me:
PHP:
1
2
3
4
if(count($dns[$i]) == 1)
{
    $dns[$i] = preg_split("/(\s+|\t)/", $dns[$i][0]);
}

Noushka's Magnificent Dream | Unity


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Michali schreef op donderdag 15 december 2005 @ 12:34:
Dat is sneller te doen lijkt me:
PHP:
1
2
3
4
if(count($dns[$i]) == 1)
{
    $dns[$i] = preg_split("/(\s+|\t)/", $dns[$i][0]);
}
Die is wat fout gevoeliger, Als je bijvoorbeeld een string zo hebben die zo is: "localhost\s\s\t\sIN\t\sA\t*" dan krijg je ook een aantal tabs en spaties mee in je array.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dan maak je dit er toch van?
PHP:
1
2
3
4
if(count($dns[$i]) == 1)
{
    $dns[$i] = preg_split("/([\s\t]+)/", $dns[$i][0]);
}

;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
-NMe- schreef op donderdag 15 december 2005 @ 13:43:
Dan maak je dit er toch van?
PHP:
1
2
3
4
if(count($dns[$i]) == 1)
{
    $dns[$i] = preg_split("/([\s\t]+)/", $dns[$i][0]);
}

;)
ik dacht dat \t ook onder de character class \s ( whitespace ) viel dus dan zou
PHP:
1
2
3
4
if(count($dns[$i]) == 1)
{
    $dns[$i] = preg_split("/\s+/", $dns[$i][0]);
}

ook al moeten werken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • b19a
  • Registratie: September 2002
  • Niet online
PHP:
1
2
preg_match("/([\S]+)\s+([\S]+)\s+([\S]+)/", $dns[$i], $t);
var_dump($t);

Met zoiets zou het ook aardig moeten lukken lijkt me.

Acties:
  • 0 Henk 'm!

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Naja zeg ik wordt gek :D

Ik heb weer eens last van tabs en enters (geen idee waar ze vandaan komen), maar ik moet ervanaf. Dus trimmen?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    $origin = $DNS_CONFIG['ORIGIN'];
    $origin = trim($origin);

    echo "<PRE>" .$origin;
    $sql2 = "INSERT INTO domain_dns_info
        (serial,refresh,retry,expire,ttl_minimum,ttl_max,ORIGIN)
        VALUES
        ('" .$DNS_CONFIG['serial'] ."
        ','" .$DNS_CONFIG['refresh'] ."
        ','" .$DNS_CONFIG['retry'] ."
        ','" .$DNS_CONFIG['expire'] ."
        ','" .$DNS_CONFIG['ttl_minimum'] ."
        ','" .$DNS_CONFIG['ttl_max'] ."
        ','" .$origin ."
        ')";

Wat zie ik tot mijn verbazing in mijn database staan?
code:
1
domein.nl\r\n\t\t'


:? :? WTF :? :?
Snap ik er nou echt helemaal niets van? :/

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Bekijk je code nog eens goed... je doet steeds ." en dan op de volgende regel de rest van de string. Dan zit er dus ook een enter in.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Sowieso haalt trim nog steeds alleen whitespaces voor en achter de string weg, niet in het midden...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1