Toon posts:

[PHP] verschillende html-tags in een array zetten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

Voor mijn php-script moet ik een html-string omzetten naar een array:

Van
code:
1
2
3
4
$string = "
  <P>De eerste alinea<P>
  <P>Tweede alinea</P>
";

Naar:
code:
1
2
3
4
5
6
$array[0] = "<P>";
$array[1] = "De eerste alinea";
$array[2] = "</P>";
$array[3] = "<P>";
$array[4] = "Tweede alinea";
$array[5] = "</P>";

ik had al dit geprobeert

$array = split("<*>", $string);

Maar dit levert niet het gewenste resultaat op. Iemand een idee?

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Met preg_split() zou iets dergelijks wel makkelijk moeten kunnen, hoef je alleen even uit te zoeken hoe regexen werken. :)

edit:
Lees net hier dat split() ook met regexs werkt.
PHP:
1
<?$pattern = '[<>]';$eenarray = split($pattern, $html);?>

Oid.

Verwijderd

Topicstarter
Dat is net het probleem ik weet bijna niks van regex's dus ik hoop dat iemand weet hoe ik dit moet aanpakken

  • thomasfilius
  • Registratie: Januari 2001
  • Laatst online: 08-09 16:06

thomasfilius

zappaeske strapatsen

de oplossing zit hem in eregi. met dit commando is het mogelijk om regular expressions te gebruiken. regular zijn lastig maar zeer machtig. bestudeer het goed en je kunt nooit meer zonder :D

Watch out where the huskies go an' don't you eat that yellow snow!


  • Tim
  • Registratie: Mei 2000
  • Laatst online: 23-07 15:18

Tim

probleem is nu waarschijnlijk dat hij de uiterste < en > gebruikt, dat het greediness

volgens mij werkd it niet bij de normal regexes, maar bij de pregs werkt dat met de modifier U, dus dan zou het "!<(.*)>!U" worden (of iets in die richting)

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
PHP:
1
<?$html = "  <P>De eerste alinea<P>  <P>Tweede alinea</P>";?>

Wordt.
PHP:
1
<?$eenarray = array(            0 => "\n",           1 => "P",           2 => "De eerste alinea",           3 => "P",           4 => "\n",           5 => "P",           6 => "Tweede alinea",           7 => "/P",           8 => "\n"           );?>

Vermoed ik.

Verwijderd

Topicstarter
Nee, in de array's staan ook de < en > en geen \n

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Op vrijdag 15 maart 2002 20:07 schreef henkerik het volgende:
Nee, in de array's staan ook de < en > en geen \n
Ik bedoel dus dat dat waarschijnlijk zou gebeuren als je die tekst door de code haalt die ik hier boven plaatste...

Verwijderd

Hier heb ik wat regexen die ik nu gebruik, misschien heb je er iets aan, maar ik moet je wel waarschuwen dat deze wat buggy kunnen zijn:
PHP:
1
<?$xhtml_tag_open = '/<([a-z]+)( +([a-z\-]+)="([^"]*)")* *>/i'; // <tag attr="value">$xhtml_tag_close = '/<\/([a-z]+) *>/i'; // </tag>$xhtml_tag_empty = '/<([a-z]+)( +([a-z\-]+)="([^"]*)")* */>/i'; // <tag attr="value" />?>

Het probleem zit hem in de dubbele quotes ("), die mogen niet in een value voorkomen, dus ook niet ge-escaped.
attr="value\"value" gaat dus fout (helaas)

Misschien dat iemand hier ook meteen een truuckje voor weet? :)

  • thomasfilius
  • Registratie: Januari 2001
  • Laatst online: 08-09 16:06

thomasfilius

zappaeske strapatsen

Omzetten met rawurlencode?

Watch out where the huskies go an' don't you eat that yellow snow!


  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
Als je zorgt dat je html fatsoenlijk in elkaar steekt, kun je het makkelijk splitten.
Dus niet zo:
code:
1
<P> vijf is groter dan 4: 5 > 4 </P>

Maar zo:
code:
1
<P> vijf is groter dan 4: 5 &gt; 4 </P>

Dan heb je geen last van foute splits op > en < tekens.

Verwijderd

Op zaterdag 16 maart 2002 14:01 schreef Limhes het volgende:
Als je zorgt dat je html fatsoenlijk in elkaar steekt, kun je het makkelijk splitten.
Dus niet zo:
code:
1
<P> vijf is groter dan 4: 5 > 4 </P>

Maar zo:
code:
1
<P> vijf is groter dan 4: 5 &gt; 4 </P>

Dan heb je geen last van foute splits op > en < tekens.
*kuch*
<input type="text" value="bla>bla" />

  • tomato
  • Registratie: November 1999
  • Niet online
Cheatah: Het probleem zit hem in de dubbele quotes ("), die mogen niet in een value voorkomen, dus ook niet ge-escaped.
attr="value\"value" gaat dus fout (helaas)

Misschien dat iemand hier ook meteen een truuckje voor weet? :)
Je kunt bijvoorbeeld het volgende pattern gebruiken om tekst tussen quotes te matchen (waar geescapte quotes in voor mogen komen):
code:
1
2
3
4
5
6
7
8
9
/
   "          # Opening quote
   [^"\\]*    # Normal character
   (?:
    \\.    # Escaped character
    [^"\\]*     # Normal character
   )*
   "          # Closing quote
/gs

En dit kun je natuurlijk in andere regexen verwerken... :)
Pagina: 1