Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP ja nettisivun hakeminen

Sivun loppuun

viljami [14.01.2011 15:34:01]

#

Olen tässä aloitteleva PHP vääntäjä ja ajattelin yrittää rakentaa tällaista skriptiä, joka imuroi tietyn internet sivun ja parseroi sitten sieltä vain tietyt pätkät tekstiä irti. Teoriassa tuon olen saanut toimimaan aika mukavasti, mutta välillä tulee ongelmaa, koska curl imuroi sivun muotoiluineen ja nyt sen parserointi on vaikeampaa toteuttaa. Onko olemassa suoraa curlin tyyppistä käskyä, jolla haettaisiin vain sivun sisältö, ilman muotoiluja, eli siis pelkkä nettisivulla näkyvä teksti?

Blaze [14.01.2011 15:56:22]

#

lynx --dump -vivun kanssa?

Edit: eikun niin, PHP:ssähän oli tuollanen: strip_tags(), se on varmaan, mitä haet.

Metabolix [14.01.2011 15:59:32]

#

Usein niistä "muotoiluista" eli HTML-tageista on huomattavaa etua parseroinnin aikana. Yksi tapa poimia teksti tagien seasta ovat säännölliset lausekkeet, joita käytetään mm. tässä koodivinkissä. Voit poimia tekstin tageineen ja käyttää sitten PHP:n funktiota strip_tags tagien poistoon.

viljami [15.01.2011 11:51:35]

#

Kiitos Blaze ja Metabolix. Totta, huomasin, kun tein tätä php skriptiä, että nuista tageista todellakin on hyötyä parseroinnissa. Nyt sain homman toimimaan..

Olisikos tähän ratkaisua, kun tämä ei toimi?

str_replace("ä","a",$teksti);

Eli merkkijonosta skandit pois, osaatteko vinkata?

-Viljami-

Hennkka [15.01.2011 11:59:47]

#

Oletko kokeillut tätä?

$teksti = str_replace("ä","a",$teksti);

Sitten vielä, että kaikki 6 merkkiä pitää käydä eriksen läpi.

eq [15.01.2011 14:02:27]

#

viljami kirjoitti:

Kiitos Blaze ja Metabolix. Totta, huomasin, kun tein tätä php skriptiä, että nuista tageista todellakin on hyötyä parseroinnissa. Nyt sain homman toimimaan..

Olisikos tähän ratkaisua, kun tämä ei toimi?

str_replace("ä","a",$teksti);

Eli merkkijonosta skandit pois, osaatteko vinkata?

-Viljami-

Millä tavalla ei toimi? Huomioithan, että funktio ei muuta alkuperäistä merkkijonoa ($teksti), vaan palauttaa viittauksen uuteen merkkijonoon, josta halutut merkit on korvattu.

Miksi edes haluat merkkijonosta skandit pois? Suomenkielista tekstia jossa aakkoset on eivat ole aakkosia on hairitsevaa lukea. Ääkkösten poistamiselle on hyvin vähän päteviä syitä vuonna 2011 (eikä ole ollut todella pitkään aikaan).

Huomoithan, että jos $teksti-merkkijono ei ole samassa merkistössä kuin PHP, str_replace ei toimi oikein. Esimerkiksi seuraava esimerkki toimii oletetusti, mutta kommentoitu osio rikkoisi toiminnan.

$merkkijono = "ÅÄÖåäö";
/* $merkkijono = utf8_encode($merkkijono); */
$merkkijono = str_replace(array("Å", "å"),
                          array("Å", "å"),
                          $merkkijono);

viljami [16.01.2011 11:01:39]

#

Moi, Siis sijoitin muutetun tekstin muuttujaan, Juurikin tällätavoin

$teksti = str_replace("ä","a",$teksti);

Mutta ei tunnu toimivan. Jos muutan koodin vaikka muotoon:

$teksti = str_replace("u","a",$teksti);

...Niin toimii hyvin. Koodi metsästää kaikki u-kirjaimet ja vaihtaa ne a-kirjaimiksi.

Ja eg, mikä on pätevä syy poistaa skandit ja mikä ei. Tämä PHP generoi tällä hetkellä RSS syötettä, jota 4x20 merkkinen LCD näyttö tulostaa. Tämä näyttö ei tue natiivina skandeja vaan tulostaa esimerkiksi ä:n tilalta µ merkin. Eli tänään = tµnµµn. Käytännössä siis skandittoman version lukeminen voisi kuitenkin olla mielekkäämpää, kuin tuon. Se miksi näyttö ei tulosta skandeja johtuu siitä, että ATmega mikro-ohjain tuossa näytön ja USB:n välissä ei osaa kirjoittaa näytölle skandeja. Skandit kun ovat näytölle erikoismerkkejä, jotka pitää luoda pikseli kerrallaan omaan muistialueeseen. Tarkoitus on tuo mikrokontrolleri muokata käsittelemään skanditkin, joskus, kun siihen kerran kooditkin on. Mutta tämä menee sivuraiteille.

Voisin itsekin olettaa, että syy sille, miksi tuo ei str_replace ei toimi on joku merkistöjen ero...

Metabolix [16.01.2011 13:32:59]

#

Jos et osaa varmuudella selvittää oikeita merkistöjä, kokeile lisätä tiedon hakemisen jälkeen joko utf8_encode tai utf8_decode ja toivo parasta.

eq [16.01.2011 14:48:30]

#

viljami kirjoitti:

Ja eg, mikä on pätevä syy poistaa skandit ja mikä ei. Tämä PHP generoi tällä hetkellä RSS syötettä, jota 4x20 merkkinen LCD näyttö tulostaa.

Ei kai se näyttö sitä suoraan (itsestään) tulosta? Tietysti, jos näytön ja RSS-syötteen väliin ei omaa ohjelmaa saa, voi olla ihan pätevä syy karsia 'huonot' merkit PHP:nkin puolella.

viljami [16.01.2011 21:48:19]

#

Itseasiassa näytön ja RSS syötteen välissä on valmis netistä imuroitu softa. Se toimii vallan mainiosti ja ymmärtää lukemastaan RSS syötteestä skandit. Softa myös lähettää skandit kaiketi ihan ok näytön ja PC väliselle sulautetulle järjestelmälle. Ongelma siis todellakin on sulautettu järjestelmä näytön ja PC:n välillä. Tämä sulautettu järjestelmä ei osaa kirjoittaa skandeja näytölle. Koska tämä sulautettu järjestelmä on kiinan maalla suunniteltua kamaa. Samoin näytön oma merkistö ei tunne skandeja, vaan ne on piirrettävä pikseli kerrallaan näytölle. Joten siis näytölle kirjoitettavasta skandista on vastuussa sitä ohjaava sulautettu järjestelmä..

Thx Metabolix, testailen tilannetta..

Macro [17.01.2011 16:43:52]

#

viljami kirjoitti:

Moi, Siis sijoitin muutetun tekstin muuttujaan, Juurikin tällätavoin

$teksti = str_replace("ä","a",$teksti);

Mutta ei tunnu toimivan. Jos muutan koodin vaikka muotoon:

$teksti = str_replace("u","a",$teksti);

...Niin toimii hyvin. Koodi metsästää kaikki u-kirjaimet ja vaihtaa ne a-kirjaimiksi.

Yksi mahdollisuus olisi, että $teksti-merkkijonossa ääkköset on korvattu entiteeteillä, jolloin str_replace-funktiossa tarvitsee korvata se entiteetti toisella merkillä, ei entiteetin tulosta.

<?php
$teksti = "T&auml;n&auml;&auml;n on maanantai.";

$teksti = str_replace("ä", "a", $teksti); // Ei toimi
$teksti = str_replace("&auml;", "a", $teksti); // Toimii

Sivun alkuun

Vastaus

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

Tietoa sivustosta