Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: DIV ID:n hakeminen

Sivun loppuun

Rocceri [19.05.2009 19:26:11]

#

Heippa.

Onkos mahdollista hakea toiselta sivulta jotain tiettyä id:tä tai classia divistä? Ja tulostaa sen sisällön?

EDIT: Anteeksi virheeni. Tarkoitin siis, miten voi hakea jonkin tietyn nimisen (motto) input kentän value arvon.

Moderaattori voi vaihtaa otsikon mielellään sopivaksi, koska ei olekkaan divistä kyse.

Teuro [19.05.2009 19:32:16]

#

On mahdollista hakea. Tutustu esimerkiksi DOM rajapintaan.

Rocceri [19.05.2009 19:41:38]

#

Teuro kirjoitti:

On mahdollista hakea. Tutustu esimerkiksi DOM rajapintaan.

Hmm.. Löytyykö näin myös muualta netistä, vaikka jos koodi on osoitteessa www.munsivut.fi ja ettii sillä www.ohjelmointiputka.net:stä vaikka div tagin nimeltä id? (Toi id nyt oli keksitty)

Ken tietää, jos esimerkin saisi väännettäväksi.

EDIT: Anteeksi virheeni. Tarkoitin siis, miten voi hakea jonkin tietyn nimisen (motto) input kentän value arvon.

Rocceri [19.05.2009 21:05:19]

#

Eikö kukaan tiedä? :s Tarvitsisin pikaisesti

tsuriga [19.05.2009 21:07:03]

#

file_get_contents + getElementById.

Rocceri [19.05.2009 21:09:04]

#

Osaisitko antaa esimerkin? Eikös tolla file_get_contents:llä saa sivun näkymään?

trilog [19.05.2009 21:12:18]

#

Rocceri kirjoitti:

Osaisitko antaa esimerkin? Eikös tolla file_get_contents:llä saa sivun näkymään?

https://www.php.net/file_get_contents:

file_get_contents — Reads entire file into a string

Esimerkit löytyvät edellä mainituilta sivuilta soveltamalla.

Rocceri [19.05.2009 21:16:42]

#

trilog kirjoitti:

Rocceri kirjoitti:

Osaisitko antaa esimerkin? Eikös tolla file_get_contents:llä saa sivun näkymään?

https://www.php.net/file_get_contents:

file_get_contents — Reads entire file into a string

Esimerkit löytyvät edellä mainituilta sivuilta soveltamalla.

Hmm.. Valitettavasti nyt pätkii tuo englanti.. Empä tiedä mitä tuolta pitäisi soveltaa. Kun ei kommenteista tuolla mitään ymmärrä.

Teuro [19.05.2009 21:17:59]

#

Rocceri kirjoitti:

Hmm.. Valitettavasti nyt pätkii tuo englanti.. Empä tiedä mitä tuolta pitäisi soveltaa. Kun ei kommenteista tuolla mitään ymmärrä.

Sitten vain opiskelemaan Englantia. Takaan, että tulet sitä taritsemaan erittäin paljon, mikäli aiot jatkaa ohjelmoinnin parissa.

Rocceri [19.05.2009 21:23:38]

#

Teuro kirjoitti:

Rocceri kirjoitti:

Hmm.. Valitettavasti nyt pätkii tuo englanti.. Empä tiedä mitä tuolta pitäisi soveltaa. Kun ei kommenteista tuolla mitään ymmärrä.

Sitten vain opiskelemaan Englantia. Takaan, että tulet sitä taritsemaan erittäin paljon, mikäli aiot jatkaa ohjelmoinnin parissa.

Se tässä nyt ei ole varmaan pääasia. (Vaikka ihan oikeassa olet) Väsyttää vaan ihan vietävästi kun kuudelta olen herännyt. Ehkä sen takia ei muistu sanat mieleen. Mutta jos ihan asiassa pysytään..

Teuro [19.05.2009 21:40:38]

#

Rocceri kirjoitti:

Se tässä nyt ei ole varmaan pääasia. (Vaikka ihan oikeassa olet) Väsyttää vaan ihan vietävästi kun kuudelta olen herännyt. Ehkä sen takia ei muistu sanat mieleen. Mutta jos ihan asiassa pysytään..

Ehkä kannattaa nukkua hetken aikaa, jotta pahin kiire menee ohitse ja jaksaa taas keskittyä. No mutta alla on pienehkö esimerkki, jossa haetaan tietty linkkisolmu. Lopuksi tulostetaan vielä linkin teksti.

<?php
$data = file_get_contents("http://www.manssi.net/index.php");

$sivu = new DOMDocument("1.0", "ISO-8859-1");
$sivu->loadXML($data);

/* Ajetaan DOM::validate() metodin läpi */
$sivu->validate();

$solmu = $sivu->getElementById("etusivu");

echo $solmu->textContent;
?>

trilog [19.05.2009 21:50:59]

#

Rocceri kirjoitti:

EDIT: Anteeksi virheeni. Tarkoitin siis, miten voi hakea jonkin tietyn nimisen (motto) input kentän value arvon.[/b]

Teuro vastasikin jo alkuperäiseen kysymykseen. Laitetaan vielä tähän uuten kysymykseen esimerkki:

<?php
// Luodaan DOM-dokumentti
$xmldoc = new DOMDocument("1.0", "UTF-8");

$html = $xmldoc->createElement("html");
$xmldoc->appendChild($html);

$head = $xmldoc->createElement("head");
$html->appendChild($head);

$title = $xmldoc->createElement("title", "");
$head->appendChild($title);

$body = $xmldoc->createElement("body");
$html->appendChild($body);

$input = $xmldoc->createElement("input");
$input->setAttribute("name", "testi");
$input->setAttribute("type", "text");
$input->setAttribute("value", "morjes");
$body->appendChild($input);

echo $xmldoc->saveXML(); // Tulostetaan valmis dokumentti

// Etsitään pyydetty input -elementti nimen perusteella ja tulostetaan sen sisältö
$search = "testi";
foreach ($xmldoc->getElementsByTagName("input") as $node) {
    if ($node->getAttribute("name") === $search) {
        echo "Löytyi, value sillä on: '".$node->getAttribute("value")."'";
        break;
    }
}
?>

Toki tämäkin menisi tuolla getElementById:llä helposti, jos input -elementti vain id -määrityksen sisältää.

Rocceri [20.05.2009 14:37:46]

#

trilog: Mitenkös tällä haetaan muualta netistä? Tuohan scannaa sivun jolla se on (?)

trilog [20.05.2009 14:41:00]

#

Rocceri kirjoitti:

trilog: Mitenkös tällä haetaan muualta netistä? Tuohan scannaa sivun jolla se on (?)

Jep, esimerkin tarkoitus olikin näyttää miten DOM -rajapintaa käytetään. Teuron esimerkissä oli, miten toiselta sivulta haetaan tietoja.

Rocceri [20.05.2009 14:47:06]

#

trilog kirjoitti:

Rocceri kirjoitti:

trilog: Mitenkös tällä haetaan muualta netistä? Tuohan scannaa sivun jolla se on (?)

Jep, esimerkin tarkoitus olikin näyttää miten DOM -rajapintaa käytetään. Teuron esimerkissä oli, miten toiselta sivulta haetaan tietoja.

Miten nämä toiminnot yhdistetään?

Teuro [20.05.2009 15:39:48]

#

Rocceri kirjoitti:

Miten nämä toiminnot yhdistetään?

Tuossa mun esimerkissähän ladataan ulkopuolinen sivu, sekä etsitään tietyllä id:ä oleva elementti, sekä tulostetaan sen tekstisisältö. Ei kai tuossa mitään tarvitse yhdistellä. Muiden elementtien valitseminen tapahtuu aivan samalla tavalla. Input elementeillä hakeminen olisi jotenkin näin:

<?php
$data = file_get_contents("http://www.manssi.net/palaute.php");

$sivu = new DOMDocument("1.0", "ISO-8859-1");
$sivu->loadXML($data);

/* Ajetaan DOM::validate() metodin läpi */
$sivu->validate();

$solmu = $sivu->getElementsByTagName("input");

for($a = 0; $a < $solmu->length; $a++){
    echo $solmu->item($a)->getAttribute("value");
}
?>

Rocceri [20.05.2009 15:42:56]

#

Teuro kirjoitti:

Rocceri kirjoitti:

Miten nämä toiminnot yhdistetään?

Tuossa mun esimerkissähän ladataan ulkopuolinen sivu, sekä etsitään tietyllä id:ä oleva elementti, sekä tulostetaan sen tekstisisältö. Ei kai tuossa mitään tarvitse yhdistellä. Muiden elementtien valitseminen tapahtuu aivan samalla tavalla. Input elementeillä hakeminen olisi jotenkin näin:

<?php
$data = file_get_contents("http://www.manssi.net/palaute.php");

$sivu = new DOMDocument("1.0", "ISO-8859-1");
$sivu->loadXML($data);

/* Ajetaan DOM::validate() metodin läpi */
$sivu->validate();

$solmu = $sivu->getElementsByTagName("input");

for($a = 0; $a < $solmu->length; $a++){
    echo $solmu->item($a)->getAttribute("value");
}
?>

... printaa ValmisUusiksu1018ValmisUusiksi Onkohan tuo mitä tuossa valuessa on? Jos, niin sitten toimii. Mutta, tuohon jos vielä sellainen, että hakee tietyn nimisen inputin? Koska jollain sivuilla niitä on reilusti

Teuro [20.05.2009 15:48:31]

#

Rocceri kirjoitti:

... printaa ValmisUusiksu1018ValmisUusiksi Onkohan tuo mitä tuossa valuessa on? Jos, niin sitten toimii. Mutta, tuohon jos vielä sellainen, että hakee tietyn nimisen inputin? Koska jollain sivuilla niitä on reilusti

Tulostus on ihan oikein. Tietyn nimistä inputtia ei kaiketikaan voi ihan suoraan hakea, mutta vastaavalla getAttribute("name"); metodilla onnistuu ihan mainiosti.

EDIT siis

<?php
if($haettuNimi == $solmu->getAttribute("name")){
    /*Tee jotakin */
}
?>

Rocceri [20.05.2009 16:01:33]

#

Hmm..
Tarkoitus olisi hakea sivulta www.habbo.fi/me käyttäjänimen perusteella 'motto'.
Hahmojen sivut hotellissa on muotoa habbo.fi/home/hahmo, ja tällä ns. profiilisivulla lukee tämä motto myös muodossa:

<div class="profile-motto">
Hahmon motto
<div class="clear"></div></div>

Jos on annettu muuttujalle $nimi arvoksi vaikka Average, tämä koodi hakisi tiedon osoitteesta http://habbo.fi/home/Average.
Sen jälkeen koodi etsisi tämän classin nimeltä profile-motto, ja tulostaisi sen sisällön.

Ps. Anteeksi taas, sanoin aluksi että id pitäisi etsiä, sitten inputti, mutta unohdin, että tuon input kohdan näkee, pitää olla kirjautuneena sisälle, ja.. Niin, se jäi siihen, että tuo koittaisi hakea omaa mottoa jos on kirjautunut sivulle.

Eli, siis pitäisi hakea sittenkin div classin sisältö.

Teuro [20.05.2009 16:08:04]

#

Rocceri kirjoitti:

Ps. Anteeksi taas, sanoin aluksi että id pitäisi etsiä, sitten inputti, mutta unohdin, että tuon input kohdan näkee, pitää olla kirjautuneena sisälle, ja.. Niin, se jäi siihen, että tuo koittaisi hakea omaa mottoa jos on kirjautunut sivulle.

Eli, siis pitäisi hakea sittenkin div classin sisältö.

No niin nyt sinulle on annettu tarvittavat työkalut tuon solmun hakemiseen. Koeta ensin hakea itse tuo solmu, äläkä lannistu vaikka se ei heti onnistuisikaan. Haet siis DOMDocument::getElementsByTagName("div") metodilla elementit taulukkoon, jonka jälkeen käyt taulukon läpi esimerkki löytyy tästä langasta.

Jokaisen solmun kohdalla vertaat DOMElement::getAttribute("class") metodilla ollaanko oikeassa solmussa, jonka jälkeen teet mitä haluat kyseisellä solmulla. Koko solmun tekstisisältö on textContent jäsenmuuttujassa. Solmun sisällä olevat solmut joudut hakemaan erikeen.

trilog [20.05.2009 16:08:17]

#

Rocceri kirjoitti:

Eli, siis pitäisi hakea sittenkin div classin sisältö.

Sen saat haettua minun esimerkin mukaisesti. Muutat vain getElementsByTagName("input") => getElementsByTagName("div") ja $node->getAttribute("name") => $node->getAttribute("class")

Rocceri [20.05.2009 16:23:05]

#

trilog kirjoitti:

Rocceri kirjoitti:

Eli, siis pitäisi hakea sittenkin div classin sisältö.

Sen saat haettua minun esimerkin mukaisesti. Muutat vain getElementsByTagName("input") => getElementsByTagName("div") ja $node->getAttribute("name") => $node->getAttribute("class")

Niin se muuten toimisi, jos tämä scripti olisi tuolla http://habbo.fi/home/Average osoitteessa.

trilog [20.05.2009 16:25:29]

#

Rocceri kirjoitti:

Niin se muuten toimisi, jos tämä scripti olisi tuolla http://habbo.fi/home/Average osoitteessa.

Sekin on sinulle kerrottu jo, miten voit hakea toisilta sivuilta tietoja (file_get_contents). Nyt joudut siis hieman soveltamaan oppimaasi.

Rocceri [20.05.2009 16:37:01]

#

Valitettavasti menee yli hilseen tämä DOM. :s
En millään saa väännettyä mitään. 2 päivää olen koittanut - ilman tulosta.

Ihme_kala [20.05.2009 16:45:34]

#

Rocceri, suosittelen opettelemaan tiedonhaun jalon taidon. Vaikutat siltä että alat ohjelmoimaan jotain ja heti kun tulee pienikin vaikeus vastaan, ryntäät ohjelmointiputkaan tekemään uutta topikkia, ja kun sieltä linkitetään sivusto, vastaat ettet osaa oikein englantia tai sivu on liian sekava tai "en tajunnut kun luin 10min tota".

Ohjelmointi vaatii kärsivällisyyttä, siihen oppii kyllä kun vaan yrittää. Ihan rauhassa. Sen DOMinkin opit kun rauhallisesti luet eri oppaita alusta alkaen ja uhraat oikeasti sitä aikaa.

trilog [20.05.2009 16:52:14]

#

En yleensä suoraan valmista koodia laittele, mutta tässä tapauksessa laitan, koska ehkä sekoitin sinua tuon oman esimerkkini kanssa liikaa.

<?php
/* Teuron esimerkistä: */
// Haetaan data sivulta
$data = file_get_contents("http://www.manssi.net/palaute.php");

// Luodaan uusi dokumentti
$xmldoc = new DOMDocument("1.0", "ISO-8859-1");

// Ladataan haettu sisältö dokumenttiin...
$xmldoc->loadXML($data);

// ...ja validoidaan se
$xmldoc->validate();


/* Minun esimerkistä: */
// Etsitään pyydetty elementti
$search = "testi";

foreach ($xmldoc->getElementsByTagName("div") as $node) {
    // Verrataan elementin 'class' -arvoa etsittävään arvoon
    if ($node->getAttribute("class") === $search) {
        echo "Löytyi, sisältö on: '".$node->textContent."'";
        // Lopetetaan silmukka, koska elementti löytyi jo, joten muita div -elementtejä on turha enää käydä läpi
        break;
    }
}
?>

Ei ollut vaikeaa kahden esimerkin soveltaminen, eihän? Kotitehtävänä tässä oli tuo textContent, jolla saadaan elementin sisältö esiin, jonka takia todennäköisesti et saanut haluttua tietoa ulos.

Rocceri [20.05.2009 17:14:55]

#

Kyllä, kiitos. Tuo toimii tälläisenä:

<?php
/* Teuron esimerkistä: */
// Haetaan data sivulta
$data = file_get_contents("http://www.manssi.net/index.php");

// Luodaan uusi dokumentti
$xmldoc = new DOMDocument("1.0", "ISO-8859-1");

// Ladataan haettu sisältö dokumenttiin...
$xmldoc->loadXML($data);

// ...ja validoidaan se
$xmldoc->validate();


/* Minun esimerkistä: */
// Etsitään pyydetty elementti
$search = "tapahtuma";

foreach ($xmldoc->getElementsByTagName("div") as $node) {
    // Verrataan elementin 'class' -arvoa etsittävään arvoon
    if ($node->getAttribute("class") === $search) {
        echo "Löytyi, sisältö on: '".$node->textContent."'";
        // Lopetetaan silmukka, koska elementti löytyi jo, joten muita div -elementtejä on turha enää käydä läpi
        break;
    }
}
?>

Mutta, kun haetaankin tuolta Habbosta, missä onkin yhden div classin sisällä toinenkin div, niin ei toimi.

<?php
/* Teuron esimerkistä: */
// Haetaan data sivulta
$data = file_get_contents("http://www.habbo.fi/home/Average");

// Luodaan uusi dokumentti
$xmldoc = new DOMDocument("1.0", "ISO-8859-1");

// Ladataan haettu sisältö dokumenttiin...
$xmldoc->loadXML($data);

// ...ja validoidaan se
$xmldoc->validate();


/* Minun esimerkistä: */
// Etsitään pyydetty elementti
$search = "profile-motto";

foreach ($xmldoc->getElementsByTagName("div") as $node) {
    // Verrataan elementin 'class' -arvoa etsittävään arvoon
    if ($node->getAttribute("class") === $search) {
        echo "Löytyi, sisältö on: '".$node->textContent."'";
        // Lopetetaan silmukka, koska elementti löytyi jo, joten muita div -elementtejä on turha enää käydä läpi
        break;
    }
}
?>

Johtuuko vika siitä, että tuon haettavan classin sisällä on toinenkin divi?

trilog [20.05.2009 18:16:50]

#

Rocceri kirjoitti:

Johtuuko vika siitä, että tuon haettavan classin sisällä on toinenkin divi?

Ei sillä tässä tapauksessa ole vaikutusta, mikäli siis se div on tällainen:

<div class="profile-motto">
Hahmon motto
<div class="clear"></div></div>

Rocceri [20.05.2009 18:34:37]

#

trilog kirjoitti:

Rocceri kirjoitti:

Johtuuko vika siitä, että tuon haettavan classin sisällä on toinenkin divi?

Ei sillä tässä tapauksessa ole vaikutusta, mikäli siis se div on tällainen:

<div class="profile-motto">
Hahmon motto
<div class="clear"></div></div>

Mistä tämä sitten johtuu?

tsuriga [20.05.2009 19:03:28]

#

Eikös tuo validointi ole aika turhaa tuossa? Manuskan mukaan ko. metodi palauttaa vaan totuusarvo riippuen validoinnin tuloksesta, eikä tuossa oteta sitä mitenkään huomioon.

EDIT: Olen kuullut esim. velhosta nimeltä tino@mureakuha, jolle merkistöt PHP:ssä ovat kuin aamukaurapuuroa. Alla oleva mutu-tieto ja nillitys on allekirjoittaneen lyhyen merkistöseikkailun antia. Luottakaamme tulevaan kutosversioon.

Toinen kuriositeetti: PHP:n kanssa saa olla aina vähän varpaillaan noiden merkistöjen kanssa. Tässähän nyt tehdään niin, että haetaan file_get_contents-funktiolla UTF8-koodatuksi metatageissa väitettyä dataa, jonka sitten kerrotaan DOMDocument-oliolle olevan latin1:tä. Noh, file_get_contents ei pikaisen lueskelun mukaan aina hanskaa unicodea, eikä palvelimella pyörivä PHP (ns. "kunnon" unicode-tuki on ilmeisesti tulossa vasta versioon 6?) välttämättä osaa säilöä merkkijonon merkistöä oikein (citation needed). Oman mausteensa tuovat vielä kaikki lisäosat ja oliot, joille koodausta pitää erikseen mainostaa (lisääppä tuohon vielä saveHTML ja Tidy [Nimim. CP-1252 -> ISO-8859-1? -> UTF-8 = Ctrl+H:lle hommia]. Sudenkuoppia on kuulemma mahdollista välttää jos omistaa loitsukirjan ja jäniksenkäpälän.

Esimerkki ongelmanratkaisun vaiheisiin:

1. Ei toimi? Miten ei toimi?
    //Oikeaa div-elementtiä ei löydy.
 -> 2. Miksi ei löydy? Tutkaillaan löytyneitä div-solmuja.
        //Div-elementtejä ei löytynyt yhtään kappaletta
    -> 3. Miksi ei löytynyt? Tutkaillaan luotua DOMDocument-instanssia.
            //Olion luonti epäonnistui. Korjataan virhe.

Muuttujien ja tilojen tutkailuihin kelpaavat esim. echo, var_dump sekä tässä tilanteessa DOMDocument->saveHTML. Useasti myös virhelogin tuijottelu voi auttaa, testausserverillä tulosteet on helpoin ohjata (myös) suoraan sivulle. Ja joku IDE varmaan helpottaa debuggausta kummasti, mutta voip mennä jo yliammunnan puolelle.

peg [20.05.2009 19:24:27]

#

Voiko tehdä näin:

<?php
$teti = file_get_contents("http://www.habbo.fi/home/Average");

$alku = "profile-motto";
$loppu = strrev("profile-friend-request");
$teti = strstr($teti, $alku);
$ulos = strrev(strstr(strrev($teti),$loppu) );
$ulos = ereg_replace('">', ' = ', $ulos);
echo $ulos;
?>

tulostaa: profile-motto = Haterz Everywhere

Teuro [20.05.2009 19:29:51]

#

Onnistuu tuo DOMillakin, kunhan hiukan säätää tuota. Olisi pitänyt arvata, että habbo ei ole nähnytkään ehjää merkkausta, joten ainakaan XML:ä lataus ei onnistu. Alla olevalla pätkällä lataus toki onnistuu.

<?php
/* Teuron esimerkistä: */
// Haetaan data sivulta
$data = file_get_contents("http://www.habbo.fi/home/Average");

// Luodaan uusi dokumentti
$xmldoc = new DOMDocument("1.0", "ISO-8859-1");

// Ladataan haettu sisältö dokumenttiin...
$xmldoc->recover = true;
$xmldoc->strictErrorChecking = false;
@$xmldoc->loadHTML($data);

/* Minun esimerkistä: */
// Etsitään pyydetty elementti
$search = "profile-motto";

foreach ($xmldoc->getElementsByTagName("div") as $node) {
    // Verrataan elementin 'class' -arvoa etsittävään arvoon
    if ($node->getAttribute("class") === $search) {
        echo "Löytyi, sisältö on: '".$node->textContent."'";
        // Lopetetaan silmukka, koska elementti löytyi jo, joten muita div -elementtejä on turha enää käydä läpi
        break;
    }
}
?>

Merri [20.05.2009 19:33:36]

#

PHP.netissä on jonkin funktion ohessa jonkun kirjoittama koodinpätkä, joka osaa lukea "oikein" aivan tolkuttoman rikkonaistakin HTML:ää. En vain tähän hätään millään muista mikä se funktio oli, jonka oheen se oli lähetetty. Jos ottaa huomioon PHP:n funktioiden määrän, niin kukaan tuskin ihmettelee tätä... :D

Rocceri [20.05.2009 19:49:49]

#

Mahtavaa Teuro! Tuo toimii hienosti :D

lrp [20.05.2009 19:54:44]

#

Regular expressions voisi olla vastaus
https://www.ohjelmointiputka.net/keskustelu/12950-merkkijono-tiettyjen-merkkijonojen-välissä

<html>
<head>
  <title>loooooookup</title>
</head>
<body>
<?php
$theurl=array('https://www.ohjelmointiputka.net/keskustelu/12950-merkkijono-tiettyjen-merkkijonojen-v%C3%A4liss%C3%A4');

foreach ($theurl as $current){
	$contents = file_get_contents($current);
  if (!($contents))
  {
    echo 'Could not open URL';
    exit;
  }

preg_match_all("/\\[tagi\\](.*?)\\[\\/tagi\\]/", $contents, $tiedot);
var_dump($tiedot);

}
?>
</body>
</html>

Rocceri [20.05.2009 20:13:09]

#

Hmm.. Tuossa Teuron esimerkissä ei toimi ääkköset. :o Mitä merkkausta kannattaa käyttää?

tsuriga [20.05.2009 20:40:05]

#

Samaa kuin itse haettavalla sivulla.

tsuriga kirjoitti:

Tässähän nyt tehdään niin, että haetaan file_get_contents-funktiolla UTF8-koodatuksi metatageissa väitettyä dataa, jonka sitten väitetään DOMDocument-oliolle olevan latin1:tä.

Eli muuta 'ISO-8859-1' -> 'utf8'.

Rocceri [20.05.2009 20:57:11]

#

Normaalisti käytän tota ISO-8859-1:tä mutta nyt tuossa se ei toimi.

Teuro [20.05.2009 21:28:40]

#

Rocceri kirjoitti:

Normaalisti käytän tota ISO-8859-1:tä mutta nyt tuossa se ei toimi.

Normaalisti tulisi käyttää samaa merkkausta, kuin millä itse teksti on tuotettu.

Rocceri [21.05.2009 12:21:49]

#

tsuriga kirjoitti:

Samaa kuin itse haettavalla sivulla.

tsuriga kirjoitti:

Tässähän nyt tehdään niin, että haetaan file_get_contents-funktiolla UTF8-koodatuksi metatageissa väitettyä dataa, jonka sitten väitetään DOMDocument-oliolle olevan latin1:tä.

Eli muuta 'ISO-8859-1' -> 'utf8'.

Tuolla Habossa on utf-8, mutta kun laitan sen tuohon koodiin, niin ei vaikuta mitään. Sitten kun laitan tuonne Metalhabboon utf-8:n tuo Teuron koodi toimii, mutta muut ääkköset menevät.
Jos laitan Iso-8859-1:n Metalhabboon, muut ääkköset toimivat, paitsi tuo koodin luomat.

tsuriga [21.05.2009 15:11:42]

#

Onko kooditiedostosi tallennettu UTF-8-koodauksella? Onko luotavan sivun merkistöksi asetettu UTF-8? Mulla toimi ok ko tallensin Habbon esimerkkisivun omalle palvelimelle ja hain divin sisältämän arvon kotikoneelta. Käytin koodissa merkkijonoa 'utf8' parametrina DOMDocumentille (eli ilman viivaa, kuten meta-tageissa charsetin kohdalla. Liekö sitten oikea vai väärä ilmoitusasu, ken sen tietää?).

Rocceri [21.05.2009 17:07:01]

#

Eipä toimi. Sitten pelittää jos laitan index.php:hen utf8, mutta sitten menee kaikki muut ääkköset.

Mika9 [22.05.2009 09:23:34]

#

Sivusi metatagit ovat väärin asetettu ja/tai selaimesi ei ole huomannut sivusi merkistökoodauksen vaihtumista.

Jos tahdot käyttää alkuperäistä merkistöäsi niin pystyt yhdellä funktiolla (utf8_decode()) decoodaamaan haetun sivun ennen jatkokäsittelyä, jolloin merkistö on sama kuin omassa sivussasi.

Olli [25.05.2009 08:19:03]

#

Teuro kirjoitti:

Onnistuu tuo DOMillakin, kunhan hiukan säätää tuota. Olisi pitänyt arvata, että habbo ei ole nähnytkään ehjää merkkausta, joten ainakaan XML:ä lataus ei onnistu. Alla olevalla pätkällä lataus toki onnistuu.

<?php
/* Teuron esimerkistä: */
// Haetaan data sivulta
$data = file_get_contents("http://www.habbo.fi/home/Average");

// Luodaan uusi dokumentti
$xmldoc = new DOMDocument("1.0", "ISO-8859-1");

// Ladataan haettu sisältö dokumenttiin...
$xmldoc->recover = true;
$xmldoc->strictErrorChecking = false;
@$xmldoc->loadHTML($data);

/* Minun esimerkistä: */
// Etsitään pyydetty elementti
$search = "profile-motto";

foreach ($xmldoc->getElementsByTagName("div") as $node) {
    // Verrataan elementin 'class' -arvoa etsittävään arvoon
    if ($node->getAttribute("class") === $search) {
        echo "Löytyi, sisältö on: '".$node->textContent."'";
        // Lopetetaan silmukka, koska elementti löytyi jo, joten muita div -elementtejä on turha enää käydä läpi
        break;
    }
}
?>

MBnetin phpllä ei taida toimia?

Warning: domdocument() expects parameter 2 to be long, string given in ... on line 7

EDIT: Siis Teuron viimeisin esimerkki.

EDIT2:

PHP.net kirjoitti:

The DOM extension allows you to operate on XML documents through the DOM API with PHP 5.

Niinpä on.

Mutta,

PHP.net kirjoitti:

For PHP 4, use DOM XML.

MBnetissä taitaa olla php 4 vai onko 3?

Teuro [25.05.2009 11:01:15]

#

Vuonna 2009 ei kuitenkaan ole kerrassaan mitään syytä käyttää PHP:n 4 veriota, jonka tuki on loppunut aikoja sitten.

trilog [25.05.2009 11:45:49]

#

MBnetissä on PHP 4 käytössä, ja se muutenkin tippunut jo nykypäivän hostauspalveluista ajat sitten.

E: Ohho, puhinpas mitä sattuu:
koti.mbnet.fi siirtyy PHP 5:n

Olli [25.05.2009 13:27:48]

#

Onko jo siirtynyt MBnetti php 5seen?

JP_94 [25.05.2009 14:37:07]

#

Olli kirjoitti:

Onko jo siirtynyt MBnetti php 5seen?

Ei ole ihan vielä. Huomenna (26.5) pitäisi siirtyä ainakin tuon mbnetin ylläpidon sähköpostiin lähettämän tiedotteen mukaan.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta