Avatar billede hrole Mester
24. september 2008 - 08:18 Der er 24 kommentarer og
1 løsning

Udtræk af HTML

Jeg har fx et html dokument med navne og addresser, i dette er noget af teksten evt. kursiv eller/og fed.
På en anden side vil jeg gerne have udtrækket enkelte af disse via php. Ex:
Htmldokument:
Anders Andersen; Anders Andersen, Lillegade 8, Xby
Børge Børgesen; Børge Børgesen, Storegade 4, Yby
Carlo Carlosen; Carlo Carlosen, Middelvej 2, Zby
Erik Eriksen; Erik Eriksen, Højgade 1, Xkøbing

I en php vil jeg gerne udtrække, så der står følgende:
Børge Børgesen; Børge Børgesen, Storegade 4, Yby
Erik Eriksen; Erik Eriksen, Højgade 1, Xkøbing
Disse udtræk skulle gerne komme ved at jeg et sted i scriptet kan lave en linie med "Børge Børgesen, Erik Eriksen", eller noget i den retning.

Jeg har bøvlet med fgets(), htmlspecialchars() og preg_match(), men det fungerer ikke. Jeg kunne forestille mig der eller ikke bliver tale om et særligt langt script.
Avatar billede kkrasmussen Nybegynder
24. september 2008 - 09:42 #1
Er det nogel helt bestemte, fast definerede ting du skal bruge?
Avatar billede kkrasmussen Nybegynder
24. september 2008 - 09:44 #2
Aller først, start med at hente hele html dokumentet ind i en streng:

$streng = file_get_contents("<din html fil>");

dernæst kan du bruge substring til at søge de forskellige elementer ud. Men jeg tror ikke jeg helt forstår spørgsmålet helt. Den html fil du skriver om, er det den som brugeren vil se, eller bruger du den kun for at læse oplysninger ud fra?
Avatar billede jakobdo Ekspert
24. september 2008 - 09:51 #3
Substring skal du så ikke bruge, men nok nærmere preg_match() er inde på tidligere.
Avatar billede kkrasmussen Nybegynder
24. september 2008 - 10:26 #4
Nu er jeg jo ikke helt klar over præcis hvad han vil, men går ud fra han søger i en html fil og "plukker" de matchende elementer ud.

Men ja hvis han kan danne et associativt array med preg_match i stedet for et standard, vil han kunne bruge preg_match perfekt sådan cirka noget i stil med et her:

function get_match($my_match)
{
  $streng = file_get_contents("<din html fil>");
  $my_strings = explode(",", $my_match);
  $result = array();
  $i = 0;
  while($i <= count($my_string))
  {
    preg_match($streng, $my_strings[$i], $result[$i]);
    $i++;
  }
  return $result;
}

alt han nu skal gøre i kode er at kalde:

$my_result = get_match("Børge Børgesen, Erik Eriksen");

Jeg har ikke testet ovenstående, og har aldrig brug preg_match før, så jeg kan ikke sige om det er korrekt. Jakobdo må lige rette mig hvis det er.
Avatar billede jakobdo Ekspert
24. september 2008 - 10:50 #5
preg_match() er til at lave regular expressions / regulære udtryk :o)
Så din kode er ikke helt korrekt.
Men så længe hrole ikke viser lidt mere info, kan du eller jeg ikke hjælpe yderligere.
Avatar billede hrole Mester
24. september 2008 - 11:54 #6
Jeg skal prøve at være mere specifik.

kkrasmussen: Jeg er ikke lige med på hvad fast definerede ting dækker over. Men standarden for mit html dokument er navn; navn, adresse, by, tlf. osv. osv. Det er altså meningen at scriptet skal søge på navnet før ";" - men kun vise teksten efter ";".

Det html dokument jeg har skal i sit fulde ikke være tilgængeligt. Det er et jeg løbende fylder på med navne og adresser.

Det som scriptet skal vise er nogle udvalgte personer, som jeg vælger for hver side. Fx en side hvor Børge Børgesen og Erik Eriksens addresser vises, en anden hvor Børge Børgesen og Carlo Carlosens addresser vises.
Avatar billede jakobdo Ekspert
24. september 2008 - 12:10 #7
Fast definerede ting, betyder:

Navn, Navn, Adresse
Eller:
<table>
<tr>
<td>Navn</td><td>Navn</td><td>Adresse</td>
....
<td>Navn</td><td>Navn</td><td>Adresse</td>
</tr>
</table>

osv...
Det gør jo en stor forskel.
Avatar billede kkrasmussen Nybegynder
24. september 2008 - 12:59 #8
ok. Så html dokumentet er altså "blot" et andet dokument?
Hvorfor så ikke gøre det super nemt for dig selv og bruge et xml dokument? Så kan du via DOM effektivt og nemt søge efter og finde lige nøjagtig det du efterspørger, og udskrive det med en simpel kommando.
Jeg forstår ikke hvorfor det lige skal være et HTML dokument?
Du kan endda gøre det nemmere for dig selv med en .txt fil, og så blot have information om 'en person på en linje, og næste person på linjen under.

Og så kan du med noget lignende dette benytte dokumentet effektivt:

$myar = array();
$temp = fopen("<din fil>.txt", "r");
while (!feof($temp) ) {
    $line = fgets($temp);
        $tempar = explode(";", $line);
        $myar[$tempar[0]] = explode(",", $tempar[1]);
}

Og nu har du et todimensionelt array med de oplysninger du gerne vil have.
Avatar billede hrole Mester
24. september 2008 - 13:17 #9
Jeg kender ikke ikke noget til xml eller DOM :)

Jeg tænkte også på alm. tekstfil, men jeg vil gerne have mulighed for kursiv og fed skrift, og netop det ville være lettere i et html, frem for alm. tekst. Desuden ville jeg gerne have mulighed for at lave afsnit i den tekst jeg skrver for hver person. Dog er det ikke afgørende.
Avatar billede kkrasmussen Nybegynder
24. september 2008 - 13:23 #10
Koden ovenover deler en streng(altså en hel linje) op i et to dimensionelt array ud fra ; og ,
Altså kan du jo sagtens have html tags med sådan: <b>Børge Børgesen</b>;<i>Børge Børgesen ,Storegade 4, Yby</i>
og i koden kan du jo derfor blot gøre følgende:

echo $myar[0].': '.$myar["Børge Børgesen"][0].', '.$myar["Børge Børgesen"][1].', '.$myar["Børge Børgesen"][2].'<br />';
og du vil have html formateringen med.
Avatar billede kkrasmussen Nybegynder
24. september 2008 - 13:25 #11
Rettelse: Altså en linje i dit .txt dokument kunne se sådan ud:

<b>Børge Børgesen</b>;<i>Børge Børgesen ,Storegade 4, Yby</i>
<b>Anders Andersen</b>;<i>Anders Andersen, Lillegade 8, Xby</i>
osv.
Avatar billede kkrasmussen Nybegynder
24. september 2008 - 13:27 #12
rettelse igen:

echo $myar[0].': '.$myar["Børge Børgesen"][0].', '.$myar["Børge Børgesen"][1].', '.$myar["Børge Børgesen"][2].'<br />';

ændres til:
$name = "Børge Børgesen";
echo $name.': '.$myar[$name][0].', '.$myar[$name][1].', '.$myar[$name][2].'<br />'
Avatar billede hrole Mester
24. september 2008 - 13:50 #13
kkrasmussen:
Det var netop det med htmltags jeg gerne ville undgå, hvis der var en let løsning. Men jeg prøver lige scriptet du har lavet.
Avatar billede olebole Juniormester
24. september 2008 - 14:35 #14
<ole>

"Jeg tænkte også på alm. tekstfil, men jeg vil gerne have mulighed for kursiv og fed skrift, og netop det ville være lettere i et html, frem for alm. tekst. Desuden ville jeg gerne have mulighed for at lave afsnit i den tekst jeg skrver for hver person."

Pricipielt er det ikke nogen god idé at formatere data, inden de gemmes. Din applikation bliver langt mere fleksibel og anvendelig, hvis du først formaterer data, når de 'udgives'  ;o)

/mvh
</bole>
Avatar billede kkrasmussen Nybegynder
24. september 2008 - 14:59 #15
Olebole, ja det er rigtigt. Jeg ville heller aldrig gøre det 100% på den foreslåede måde, men ville slet og ret hente fra et XML med DOM i stedet. Og så ville smide html tags på i min udskrivning. Men jeg reagerer mest ud fra det stillede spørgsmål.
Avatar billede hrole Mester
24. september 2008 - 16:20 #16
Jeg tror måske jeg har forklaret det mere besværligt end det er.

Det er kun meningen der skal vises alt hvad der står efter ";" ud for personen. Det var blot eksempler med adresse. Et andet eksempel kunne være:
Mads Madsen; Mads er en dreng som bor i et hus.

Jeg har derfor prøvet at rette i scriptet, men det driller:

<?
$myar = array();
$temp = fopen("<minfil>.txt", "r");
while (!feof($temp) ) {
    $line = fgets($temp);
        $tempar = explode(";", $line);
       
}

$name = "Børge Børgesen";
echo $myar[$name][0].'<br />'
?>
Avatar billede jakobdo Ekspert
25. september 2008 - 08:12 #17
Hvorfor ikke gemme dine data i en database ?
Avatar billede hrole Mester
25. september 2008 - 10:43 #18
På længere sigt en databse. Men i første omgang vil jeg gerne have dette script til at fungere.
Avatar billede kkrasmussen Nybegynder
25. september 2008 - 13:11 #19
Jeg tror måske jeg har forklaret det mere besværligt end det er.

Det er kun meningen der skal vises alt hvad der står efter ";" ud for personen. Det var blot eksempler med adresse. Et andet eksempel kunne være:
Mads Madsen; Mads er en dreng som bor i et hus.

Jeg har derfor prøvet at rette i scriptet, men det driller:

<?
$myar = array();
$temp = fopen("<minfil>.txt", "r");
while (!feof($temp) ) {
    $line = fgets($temp);
        $tempar = explode(";", $line);
       
}

$name = "Børge Børgesen";
echo $myar[$name][0].'<br />'

Prøv at fjerne [0] fra echo $myar[$name][0].'<br />' og sætte et ; efter.
Avatar billede hrole Mester
25. september 2008 - 14:55 #20
Mener du sådan:

<?
$myar = array();
$temp = fopen("<min fil>.txt", "r");
while (!feof($temp) ) {
    $line = fgets($temp);
        $tempar = explode(";", $line);
     
}

$name = "Børge Børgesen";
echo $myar[$name].'<br />';
?>

Det giver desværre intet output på skærmen.
Avatar billede kkrasmussen Nybegynder
26. september 2008 - 11:03 #21
Ja sådan.
Men altså, jeg ved ikke lige hvorfor det ikke virker. Det burde det. Men du skal nu stadig huske at det foreslåede kun vil virke hvis det er en fil hvor en linje er lig med én række af informationer. Og så skal du jo angive det fulde filnavn istedet for <minfil>.txt. ;)
Avatar billede pidgeot Nybegynder
26. september 2008 - 11:19 #22
...mangler der ikke lige en $myar[$tempar[0]] = $tempar[1] efter den explode?

*går igen*
Avatar billede hrole Mester
26. september 2008 - 14:27 #23
Nu virker det hvis jeg angiver én persone i $name. Hvordan tilføjes flere?
Avatar billede hrole Mester
26. september 2008 - 22:20 #24
kkrasmussen:

Er der en let løsning på at tilføje flere navne, så disses informationer kommer frem?
Avatar billede hrole Mester
04. marts 2009 - 15:03 #25
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester