webForum webForum sponsras med lina och serverplats av Binero AB

Gå tillbaka   webForum > Utveckling > Webbutveckling > PHP

PHP Här diskuteras allt som har med scriptspråket PHP att göra.

Svar
 
Trådverktyg Visningsalternativ
Äldre 2012-06-12, 07:14   #1
Danne V
Medlem
 
Danne Vs avatar
 
Registrerad: 2006-08-02
Ort: Karlstad, Värmland
Inlägg: 7 446
Lösningar: 190
fråga Göra länkar av ren html-text?

Jag använder ett enkelt scrape-skript för att hämta nyheter från en viss sida.
Tyvärr saknas länkar tillbaka till den sidan.

Dom använder en särskild span-class (.rubriker) för alla rubriker. Hur lägger man anchor-taggar runt den?

Så här ser scrape-skriptet ut:
PHP-kod:
require("taggrab.class.php"); 
$urlrun="http://nyhetskällan...";
$stag="<p><span class=";
$etag="</p>";
$tspider = new tagSpider();
$tspider->fetchPage($urlrun);
$linkarray $tspider->parse_array($stag$etag); 
echo 
"<h2>Nyheter ".$urlrun."</h2><br />";
foreach (
$linkarray as $result) {
echo 
$result;
echo 
"<hr />";

..och källkoden i sidan med nyheterna är byggd så här:
HTML-kod:
<p><span class="rubriker">Här är rubriken</span><br />Här är artikelns brödtext</p>
...och så här skulle jag vilja att den blev:
HTML-kod:
<p><span class="rubriker"><a href="http://nyhetskällan...">Här är rubriken</a></span><br />Här är artikelns brödtext</p>
Alltså: Det ska vara en och samma "statiska" sökväg till alla artiklar. Och det spelar ju ingen roll om span-klassen omsluter länken eller tvärtom....

Någon?
__________________
Med vänlig hälsning från
Danne
------
Proformica.com Marknadsföring, webbdesign, webbhotell osv, mm..
Sacred Skin Ny bok om Sak Yant, traditionell, spiritistisk thailändsk tatueringskonst
Våga Vägra
FaceBook
Danne V besöker inte forumet just nu   Svara med citat
Äldre 2012-06-12, 07:21   #2
Danne V
Medlem
 
Danne Vs avatar
 
Registrerad: 2006-08-02
Ort: Karlstad, Värmland
Inlägg: 7 446
Lösningar: 190
Förresten, om det är relativt enkelt att lägga in en funktion som trunkerar (klipper av) outputen så att varje artikel inte återges i sin helhet utan bara t.ex. 200 tecken vore det inte dumt.....
__________________
Med vänlig hälsning från
Danne
------
Proformica.com Marknadsföring, webbdesign, webbhotell osv, mm..
Sacred Skin Ny bok om Sak Yant, traditionell, spiritistisk thailändsk tatueringskonst
Våga Vägra
FaceBook
Danne V besöker inte forumet just nu   Svara med citat
Äldre 2012-06-12, 07:29   #3
metalboy
Medlem
 
Registrerad: 2005-01-14
Ort: Upplands Väsby
Inlägg: 711
Lösningar: 101
Använd ett reguljärt uttryck (regular expression) för att få in länken. Nu vet jag inte hur tagSpider fungerar, men gissar att du kan prova med något liknande detta:

PHP-kod:
echo preg_replace('#<span class="rubriker">(.*?)</span>#i''<span class="rubriker"><a href="http://nyhetskällan...">$1</a></span>'$result); 
Är det artikelns brödtext du vill klippa efter exempelvis 200 tecken, eller är det rubrik + brödtext som ska vara max 200 tecken?
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain
metalboy besöker inte forumet just nu   Svara med citat
Äldre 2012-06-12, 07:50   #4
Danne V
Medlem
 
Danne Vs avatar
 
Registrerad: 2006-08-02
Ort: Karlstad, Värmland
Inlägg: 7 446
Lösningar: 190
Citat:
metalboy skrev: Visa inlägg
Använd ett reguljärt uttryck (regular expression) för att få in länken. Nu vet jag inte hur tagSpider fungerar, men gissar att du kan prova med något liknande detta:

PHP-kod:
echo preg_replace('#<span class="rubriker">(.*?)</span>#i''<span class="rubriker"><a href="http://nyhetskällan...">$1</a></span>'$result); 
Najs! Ska omedelbart testa!
Citat:
metalboy skrev: Visa inlägg
Är det artikelns brödtext du vill klippa efter exempelvis 200 tecken, eller är det rubrik + brödtext som ska vara max 200 tecken?
Det är väl enklast att bara kapa alltsammans efter X antal tecken...? Så får jag testa hur många som får det att se mest vettigt ut...
__________________
Med vänlig hälsning från
Danne
------
Proformica.com Marknadsföring, webbdesign, webbhotell osv, mm..
Sacred Skin Ny bok om Sak Yant, traditionell, spiritistisk thailändsk tatueringskonst
Våga Vägra
FaceBook
Danne V besöker inte forumet just nu   Svara med citat
Äldre 2012-06-12, 07:56   #5
Danne V
Medlem
 
Danne Vs avatar
 
Registrerad: 2006-08-02
Ort: Karlstad, Värmland
Inlägg: 7 446
Lösningar: 190
Citat:
metalboy skrev: Visa inlägg
PHP-kod:
echo preg_replace('#<span class="rubriker">(.*?)</span>#i''<span class="rubriker"><a href="http://nyhetskällan...">$1</a></span>'$result); 
Funkade galant!
Tackar!
(helvete, jag blir grymt avundsjuk på folk som kan sånt där....)
__________________
Med vänlig hälsning från
Danne
------
Proformica.com Marknadsföring, webbdesign, webbhotell osv, mm..
Sacred Skin Ny bok om Sak Yant, traditionell, spiritistisk thailändsk tatueringskonst
Våga Vägra
FaceBook
Danne V besöker inte forumet just nu   Svara med citat
Äldre 2012-06-12, 08:48   #6
metalboy
Medlem
 
Registrerad: 2005-01-14
Ort: Upplands Väsby
Inlägg: 711
Lösningar: 101
Citat:
Danne V skrev: Visa inlägg
Det är väl enklast att bara kapa alltsammans efter X antal tecken...? Så får jag testa hur många som får det att se mest vettigt ut...
Problemet med att kapa rakt av är att då räknas ju även HTML-tecknen som tecken... Dvs, du kan råka kapa mitt i </span> t.ex.

Om du begränsar längden på brödtexten - och den inte innehåller några HTML-taggar - så blir funktionen väldigt enkel. Det räcker då att använda substr().

Annars blir det lite krångligare, för att se till så man inte kapar någon HTML-tag.
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain
metalboy besöker inte forumet just nu   Svara med citat
Äldre 2012-06-12, 09:06   #7
Danne V
Medlem
 
Danne Vs avatar
 
Registrerad: 2006-08-02
Ort: Karlstad, Värmland
Inlägg: 7 446
Lösningar: 190
Citat:
metalboy skrev: Visa inlägg
Problemet med att kapa rakt av är att då räknas ju även HTML-tecknen som tecken... Dvs, du kan råka kapa mitt i </span> t.ex.

Om du begränsar längden på brödtexten - och den inte innehåller några HTML-taggar - så blir funktionen väldigt enkel. Det räcker då att använda substr().

Annars blir det lite krångligare, för att se till så man inte kapar någon HTML-tag.
Oj. Jag vill ju inte klippa mitt i en tagg...
Jag har kikat på substr men fattar nada, eller i alla fall inte var jag i så fall skulle lägga in den funktionen. Så om du har en minut över...? (host, host)
__________________
Med vänlig hälsning från
Danne
------
Proformica.com Marknadsföring, webbdesign, webbhotell osv, mm..
Sacred Skin Ny bok om Sak Yant, traditionell, spiritistisk thailändsk tatueringskonst
Våga Vägra
FaceBook
Danne V besöker inte forumet just nu   Svara med citat
Äldre 2012-06-12, 09:17 Markerad som löst av Danne V   #8
metalboy
Medlem
 
Registrerad: 2005-01-14
Ort: Upplands Väsby
Inlägg: 711
Lösningar: 101
Exempel med utökat reguljärt uttryck där brödtexten klipps efter 200 tecken:

PHP-kod:
function content_limit($content$limit=200) {
    if (
strlen($content) > $limit)
        return 
substr($content0$limit) . '...';
    return 
$content;
}

require(
"taggrab.class.php"); 
$urlrun="http://nyhetskällan...";
$stag="<p><span class=";
$etag="</p>";
$tspider = new tagSpider();
$tspider->fetchPage($urlrun);
$linkarray $tspider->parse_array($stag$etag); 
echo 
"<h2>Nyheter ".$urlrun."</h2><br />";
foreach (
$linkarray as $result) {
    echo 
preg_replace('#<p><span class="rubriker">(.*?)</span><br />(.*?)</p>#ie''"<p><span class=\"rubriker\"><a href=\"http://nyhetskällan...\">$1</a></span><br />" . content_limit("$2") . "</p>"'$result);
    echo 
"<hr />";

Lägg märke till att jag har lagt till flaggan e (eval) till det reguljära uttrycket. Det gör att jag kan använda funktionsanrop i replace-argumentet.
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain
metalboy besöker inte forumet just nu   Svara med citat
Äldre 2012-06-12, 10:26   #9
Danne V
Medlem
 
Danne Vs avatar
 
Registrerad: 2006-08-02
Ort: Karlstad, Värmland
Inlägg: 7 446
Lösningar: 190
Citat:
metalboy skrev: Visa inlägg
Exempel med utökat reguljärt uttryck där brödtexten klipps efter 200 tecken:

Lägg märke till att jag har lagt till flaggan e (eval) till det reguljära uttrycket. Det gör att jag kan använda funktionsanrop i replace-argumentet.
Suveränt!
Fungerar perfekt!
Tusen tack för hjälpen!!!!
__________________
Med vänlig hälsning från
Danne
------
Proformica.com Marknadsföring, webbdesign, webbhotell osv, mm..
Sacred Skin Ny bok om Sak Yant, traditionell, spiritistisk thailändsk tatueringskonst
Våga Vägra
FaceBook
Danne V besöker inte forumet just nu   Svara med citat
Svar
webForum > Utveckling > Webbutveckling > PHP

Trådverktyg
Visningsalternativ

Forumregler
Du får inte posta nya trådar
Du får inte posta svar
Du får inte bifoga filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är av
HTML-kod är av

Forumhopp


Alla tider är i GMT +1. Klockan är nu 23:42.


Powered by: vBulletin Version 3.8.6
Copyright © webForum