[PHP/MYSQL] "enters" uit template stream halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik vond het wat moeilijk hier een titel voor te verzinnen maar de situatie is als volgt. In mijn cms'je sla ik de templates op in een database. Die templates kan de gebruiker in een textarea veranderen. Een voorbeeld is:
code:
1
2
3
4
5
6
<table border="1">
  <tr>
    <td valign="top">{menu}</td>
    <td>{artikel}</td>
  </tr>
</table>

Wanneer het CMS'je alle output gegenereert heeft, vervangt hij de {placeholders} uit de template door de $php_variabelen die de output bevatten. Dit doe ik heel simpel met
PHP:
1
2
3
4
5
6
$tpl  = $row_tpl['body'];

$tags = array('{menu}', '{trail}');
$repl = array($menu, $trail);

$html = str_replace ($tags, $repl, $tpl);


Nu wil ik eigenlijk nog 1 ding doen voor ik $html naar de client stuur en dat is de "enters" uit de html halen. Met andere woorden:
code:
1
2
3
4
5
6
7
<table border="1"><tr><td valign="top">...menu meuk...</td><td>...etc.

in plaats van

<table border="1">
  <tr>
    <td valign="top">...menu meuk...

Ik heb geen idee in welke richting ik moet zoeken. Kan iemand mij op weg helpen?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Niek
  • Registratie: Februari 2001
  • Laatst online: 20-09 14:06

Niek

f.k.a. The_Surfer

Kan je niet gewoon dit doen?
PHP:
1
$html = str_replace("\n", "", $html);
Met nl2br kan je die dingen ook omzetten naar <br />, dus helemaal weghalen moet niet zo'n groot probleem zijn lijkt me.

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Met een regular expression? Of met str_replace?

code:
1
$html = str_replace("\n", "", $html) ;
Dan worden dus alles enkele enters weggehaald. Als je ook meerdere enters na elkaar wilt weghalen, moet je ff een regular expression in elkaar draaien.

Maar ehm... waarom wil je dit eigenlijk? Wie heeft er baat bij onoverzichtelijke output? Als ik iets uit de tweakers source wil halen, wordt ik niet echt belet doordat ze de enters eruit halen. :)

De regular expression is dan dus:
code:
1
$html = preg_replace ("'([\r\n])[\s]+'", "", $html) ;


*Ik moet sneller leren typen. Spuit 12. :Y)

[ Voor 25% gewijzigd door Cavorka op 08-07-2004 20:45 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Cavorka schreef op 08 juli 2004 @ 20:42:
code:
1
$html = str_replace("\n", "", $html) ;
Dat werkt dus niet. Dat heb ik al geprobeerd, vandaar mijn post. Volgens mij zou dit ook moeten werken, maar dat doet het dus niet... :'(

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ook ik ben veel te langzaam :) @Cavorka - die regular expression werkt dus wel...moet ik toch eens een keer gaan leren, regular expressions...dank je!

@The_Surfer - ook bedankt!

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Niek
  • Registratie: Februari 2001
  • Laatst online: 20-09 14:06

Niek

f.k.a. The_Surfer

Reveller schreef op 08 juli 2004 @ 20:45:
[...]

Dat werkt dus niet. Dat heb ik al geprobeerd, vandaar mijn post. Volgens mij zou dit ook moeten werken, maar dat doet het dus niet... :'(
Probeer in dat geval eens \r\n ipv \n:
PHP:
1
$html = str_replace("\r\n", "", $html);

edit:
Spuit BigInteger oid :P

[ Voor 10% gewijzigd door Niek op 08-07-2004 20:49 ]

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
str_replace("\r\n","",$html) erna doen voor de windows enters.

Maar het nut is me nog steeds niet duidelijk... Ik kan nog steeds de source copieren en indenten, pokkewerk, maar is wel te doen als ik het wil doen en als jij wil gaan debuggen is het nog rottiger. Makkelijker is gewoon netjes laten staan. Hindert jou minder bij het debuggen, en de echte copy/paste freak merkt er bijna niets van.

edit : spuit 11.

Maar Cavorka, als je gewoon in de laatste pass van je cms dit soort dingen doet dan merk je er niet veel van als je ze alletwee doet met een str_replace, of je moet een echte performancefreak zijn, of je moet ff leuk 100k aan html teruggeven aan de client.

Alhoewel ik wel bij het standpunt blijf dat het overbodig is en onhandig.

[ Voor 33% gewijzigd door Gomez12 op 08-07-2004 20:54 ]


Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Sure thing.

Het vage is wel dat die eerste bij mij dus ook niet werkt (ik had hem ff opgezocht, zonder te testen). Ik zoek even verder waarom hij niet werkt, aangezien het wel zou moeten werken.

@ Degenen die zeggen dat het \r\n moet zijn: werkt het dan ook nog onder *nux? Dat vraag ik me af. Ikzelf heb namelijk thuis Windows en mijn hosting Linux...

PS: Al deze antwoorden staan trouwens ook in de PHP manual, Reveller. :) Ik zou zeggen, download hem eens.

[ Voor 53% gewijzigd door Cavorka op 08-07-2004 20:52 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@Gomez12 - als ik zelf moet debuggen, zet ik die regex gewoon uit natuurlijk :)
@iedereen - ik denk dat de reden drieledig is: 1) copy-pasters minder makkelijk maken 2) minder bandbreedte / sneller parsen door browser (hoe minimaal ook) 3) nieuwsgierigen kunnen geen onderscheid maken tussen wat wel en niet automatisch gegenereerd wordt. Vaak heb je sites waarbij bepaalde automatisch gegenereerde delen (zoals een menuutje), 1 lange regel is, terwijl de rest gewoon ge-indent is. Maar als ik diep graaf in mezelf vind ik het bovenal ws. wel stoer staan ;)

@Cavorka - da's ook een idee :D Ik ga het meteen doen

[ Voor 5% gewijzigd door Reveller op 08-07-2004 20:54 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Niek
  • Registratie: Februari 2001
  • Laatst online: 20-09 14:06

Niek

f.k.a. The_Surfer

Cavorka schreef op 08 juli 2004 @ 20:48:
(...)

@ Degenen die zeggen dat het \r\n moet zijn: werkt het dan ook nog onder *nux? Dat vraag ik me af. Ikzelf heb namelijk thuis Windows en mijn hosting Linux...

(...)
Voor het PHP (hostings) platform maakt het geen moer uit wat er draait, het gaat erom op welk OS de textfiles zijn gemaakt. Heb je ze in Unix of in een betere text editor (:P) in Windows gemaakt dan is het "gewoon" \n, maar de meeste Windows progsels gebruiken \r\n (sterker nog: Notepad in Windows kan niet eens \n weergeven, Wordpad daarentegen wel 8)7).

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Reveller schreef op 08 juli 2004 @ 20:54:
@Gomez12 - als ik zelf moet debuggen, zet ik die regex gewoon uit natuurlijk :)
@iedereen - ik denk dat de reden drieledig is: 1) copy-pasters minder makkelijk maken 2) minder bandbreedte / sneller parsen door browser (hoe minimaal ook) 3) nieuwsgierigen kunnen geen onderscheid maken tussen wat wel en niet automatisch gegenereerd wordt. Vaak heb je sites waarbij bepaalde automatisch gegenereerde delen (zoals een menuutje), 1 lange regel is, terwijl de rest gewoon ge-indent is. Maar als ik diep graaf in mezelf vind ik het bovenal ws. wel stoer staan ;)

@Cavorka - da's ook een idee :D Ik ga het meteen doen
@me das ok lekker een interne check om te zien of je wel of niet aan het debuggen bent bent voor zo iets ???

@iedereen
1 : imho niet boeiend. Maakt het niet moeilijker.
2 : Wist je trouwens al dat je de laatste </td> in een tabelrow niet hoeft af te sluiten, in een <td> hoef je ook bijna geen enkel element af te sluiten. IE pakt het toch wel. Nog meer besparing, imho non-argument dus.
3 : kijk eens naar een js source encrypter, deze helpt je ook gelijk een stuk met stap 2 als je hem gelijk laat gzippen.

Nu pas de php-doc downloaden LOL.

Acties:
  • 0 Henk 'm!

  • Niek
  • Registratie: Februari 2001
  • Laatst online: 20-09 14:06

Niek

f.k.a. The_Surfer

Reveller schreef op 08 juli 2004 @ 20:54:
(...)
@iedereen - ik denk dat de reden drieledig is: 1) copy-pasters minder makkelijk maken 2) minder bandbreedte / sneller parsen door browser (hoe minimaal ook) 3) nieuwsgierigen kunnen geen onderscheid maken tussen wat wel en niet automatisch gegenereerd wordt. Vaak heb je sites waarbij bepaalde automatisch gegenereerde delen (zoals een menuutje), 1 lange regel is, terwijl de rest gewoon ge-indent is. Maar als ik diep graaf in mezelf vind ik het bovenal ws. wel stoer staan ;)
(...)
Even tegen in gaan hoor :P

1) Lijkt me niet heel erg moeilijk voor c/p-ers om dit te omzeilen:
code:
1
$ curl http://www.url.com/blaat.php | indent
2) Dat scheelt je maximaal 100 bytes per HTML filetje (gemiddeld), niks dus. Overigens, nu je dit zegt moet ik aan het verhaal denken van een webdevver die altijd dacht dat je browser sneller renderde als je je HTML indente (het zou nu eenmaal "makkelijker leesbaar" zijn voor de browser 8)7).
3) Ik zie niet echt in waarom mensen niet zouden mogen weten welke HTML stukjes dynamisch zijn? En bovendien indent ik altijd mijn dynamische HTML stukjes gewoon ;)

Enige steekhoudende argument is het "stoer" zijn, doe maar eens "View Source" op deze pagina :P

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
The_Surfer schreef op 08 juli 2004 @ 20:56:
[...]
Voor het PHP (hostings) platform maakt het geen moer uit wat er draait, het gaat erom op welk OS de textfiles zijn gemaakt. Heb je ze in Unix of in een betere text editor (:P) in Windows gemaakt dan is het "gewoon" \n, maar de meeste Windows progsels gebruiken \r\n (sterker nog: Notepad in Windows kan niet eens \n weergeven, Wordpad daarentegen wel 8)7).
Voor het php hoeft het niks uit te maken, maar voor je str_replace en je regex maakt het wel degelijk uit. Alhoewel ik grote twijfels aan wat php doet in dit geval. Volgens mij stuurt php gewoon de code door inclusief \n en \r\n en maakt je view source van je browser er iets moois van en heeft dit niks met php te maken.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

voor de bandbreedte hoef je het niet te doen, dan kan je beter HTTP compressie gebruiken.
Tegen het rippen is ook een non-argument; ik heb tooltjes die er zo weer netjes geindente code van maakt.
Tevens moet je oppassen met alle whitespace strippen, je kan ook teveel eruit halen (denk aan textarea's en pre-blokken)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
crisp schreef op 08 juli 2004 @ 21:23:
voor de bandbreedte hoef je het niet te doen, dan kan je beter HTTP compressie gebruiken.
Tegen het rippen is ook een non-argument; ik heb tooltjes die er zo weer netjes geindente code van maakt.
Tevens moet je oppassen met alle whitespace strippen, je kan ook teveel eruit halen (denk aan textarea's en pre-blokken)
Blijft nog wel het "stoere" argument over >:)
Pagina: 1