Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  PHP: osa väljalõikamine string'ist märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Aq
HV kasutaja

liitunud: 01.01.2003




sõnum 20.12.2013 10:39:38 PHP: osa väljalõikamine string'ist vasta tsitaadiga

Mul on vaja töödelda PHP-ga HTML dokumenti nii, et lõigata sealt välja teatud osad. Uurisin veidi, kas on olemas lihtsat võimalust, kuidas ID järgi mõni HTML DIV plokk välja lõigata. Vist ei ole. Kui keegi teist teab, siis võib ka seda soovitada.

Küll aga hakkasin mõtlema ühe teise lahendi peale - kuna ka allikaks olev HTML kood on minu kontrolli all, siis mõtlesin, et paigutan väljalõigatavate plokkide ümber HTML kommentaaridena markerid. Ja on siis vaja lõigata välja kõik, mis jääb kahe markeri vahele.

Ehk siis, mul on vaja, et sellisest allikkoodist:

<div id="container">
   <h1>Pealkiri</h1>
   <div id="cutout">Siin väljalõigatav sisu, sh. tuleb arvestada, et see sisu on muutuv!</div>
   <div id="info">Siia mingi sisu</div>
</div>

Oleks tulemus pärast PHP poolset töötlemist selline:

<div id="container">
   <h1>Pealkiri</h1>
   <div id="info">Siia mingi sisu</div>
</div>


Kas ma saan kuidagi selle lahendada kui teen HTML koodi näiteks selliseks:

<div id="container">
   <h1>Pealkiri</h1>
   <!-- marker -->
   <div id="cutout">Siin väljalõigatav sisu, sh. tuleb arvestada, et see sisu on muutuv!</div>
   <!-- marker -->
   <div id="info">Siia mingi sisu</div>
</div>


Ehk siis - kõik mis asub markerite vahel eemaldada? Pole oluline, kas markerid ise jäävad string'i sisse või mitte.
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Mnator
HV Guru

liitunud: 18.10.2007




sõnum 20.12.2013 11:16:41 vasta tsitaadiga

"... kuna ka allikaks olev HTML kood on minu kontrolli all..." viitab igatahes oma sisult sellele, et on olemas veel primaarsem allikmaterjal. Miks sa otse sealt oma infot ei võta?
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
gynterk
HV kasutaja

liitunud: 17.01.2004




sõnum 20.12.2013 11:34:03 vasta tsitaadiga

HTMLi parsimiseks kasutatakse DOM-i. Kui mõned üksikud read, siis kasuta regulaaravaldisi.
Kommentaarid: 5 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
Aq
HV kasutaja

liitunud: 01.01.2003




sõnum 20.12.2013 13:20:44 vasta tsitaadiga

Tänud DOM viidete eest, vaatan neid mingi hetk. Siiski, suutsin ühel väga koledal viisil ka juba soovitud tulemuse saavutada icon_smile.gif Aga ehk saab DOM'iga asja optimaalsemaks.
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
kullar
HV kasutaja
kullar

liitunud: 26.11.2006



Autoriseeritud ID-kaardiga

sõnum 21.12.2013 02:16:10 vasta tsitaadiga

Uuri parem domi xpathi, mis laseb sul selectida id'de, regexi jms järgi.
http://www.php.net/manual/en/domxpath.query.php

_________________
Online Perekonna Eelarve, Keerukamad veebipõhised infosüsteemid jms
Kommentaarid: 27 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum
19Mart94
HV kasutaja

liitunud: 22.06.2010



Autoriseeritud ID-kaardiga

sõnum 21.12.2013 03:21:48 vasta tsitaadiga

php:
  1. <?php
  2.  
  3. $html = '
  4. <div id="container">
  5.         <h1>Pealkiri</h1>
  6.         <div id="cutout">Siin väljalõigatav sisu, sh. tuleb arvestada, et see sisu on muutuv!</div>
  7.         <div id="info">Siia mingi sisu</div>
  8. </div>
  9. ';
  10.  
  11. echo preg_replace('!<div\s+id="cutout">.*?</div>!is', '', $html);
  12.  
  13. ?>


NB! See ei tööta, kui väljalõigatav div sisaldab div elemente.
Kommentaarid: 33 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 31
tagasi üles
vaata kasutaja infot saada privaatsõnum
EvilRms
HV vaatleja

liitunud: 30.06.2007




sõnum 23.12.2013 12:02:10 Äkki abiks vasta tsitaadiga

php:
  1.  
  2. <?php
  3.  
  4. $html = '
  5. <div id="container">
  6.         <h1>Pealkiri</h1>
  7.         <!--loika-->
  8.                 Siin väljalõigatav sisu, sh. tuleb arvestada, et see sisu on muutuv!
  9.         <!--loika-->
  10.         <div id="info">Siia mingi sisu</div>
  11. </div>
  12. ';
  13.  
  14. $textValjasta = explode("<!--loika-->", $html);
  15.  
  16. echo $textValjasta[0].$textValjasta[2];
  17.  
  18. ?>
  19.  
tagasi üles
vaata kasutaja infot saada privaatsõnum
Aq
HV kasutaja

liitunud: 01.01.2003




sõnum 23.12.2013 22:36:07 vasta tsitaadiga

Ehh, jah ma niimoodi tegingi nagu EvilRms kirjeldab icon_smile.gif Aga see vist ei ole eriti elegantne lahendus? icon_wink.gif Igatahes mõtlen mingi hetk edasi, kuidas selle DOM abil paremini teha.
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
LiivaneLord
Sõpradele "Olavi"

liitunud: 20.06.2006




sõnum 23.12.2013 22:45:10 vasta tsitaadiga

Javascriptiga: document.getElementById('cutout').innerHTML=''; või siis document.getElementById('cutout').style.display='none';
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 19
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 23.12.2013 23:39:25 vasta tsitaadiga

LiivaneLord, veel elegantsem oleks teha removeChild käsuga.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
LiivaneLord
Sõpradele "Olavi"

liitunud: 20.06.2006




sõnum 24.12.2013 00:34:30 vasta tsitaadiga

mikk36, jep. thumbs_up.gif
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 19
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  PHP: osa väljalõikamine string'ist
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.