Avatar billede mejer140 Nybegynder
28. februar 2009 - 17:11 Der er 10 kommentarer og
1 løsning

Funktionen inden i eregi_replace

Jeg har problemer med en funktion jeg bruger inde i eregi_replace funktionen. Ideen med den er at få omregnet relative højde- og viddestørrelser til absolutte, så siden bliver optimeret til Safari. Min kode er:

function abs_size($width,$height,$src) {
list($width_orig, $height_orig, $type_orig, $attr_orig) = getimagesize($src);
if (preg_match("/%/",$width)) {
    $width1 = $height /  $height_orig * $width_orig;
} else preg_match("/%/",$height)) {
    $height1 = $width /  $width_orig * $height_orig;
}
$returner = 'src="'.$src.'" width="'.$width1.'" height="'.$height1.'"';

return $returner;
}

$tekst = eregi_replace("\[hbillede\]([^[]+),([^[]+),([^[]+)\[/hbillede\]","<a href=\"".$typene."billeder/\\1\" target=\"_blank\"><img ".abs_size('\\2','\\3',$typene.'billeder/\\1')." style=\"float:right;padding-left:12px\" /></a>",$tekst);


Problemet er, at jeg ikke ved, hvordan variablerne $width og $height bliver opfattet. For preg_match finder ikke nogen procent-tegn, men jeg har fundet ud af, at variablerne overføres som strings.
Nogen forslag?
Avatar billede olebole Juniormester
28. februar 2009 - 17:24 #1
<ole>

Mon ikke du har fejlmeldinger slået fra (og så kan man jo ikke udvikle PHP)? Ellers ville du sikkert have fået en melding om det manglende argument i dine funktionskald:
    preg_match("/%/",$width)

Om preg_match:
    http://dk2.php.net/manual/en/function.preg-match.php

Om fejlmeldinger:
    http://dk2.php.net/manual/en/function.error-reporting.php

Derudover forstår jeg ikke, hvorfor du blander Perl (preg) og Posix (ereg) sammen. Det svarer lidt til at tale halvt tyrkisk og halvt norsk til sin nabo  =)

Sidst, men ikke mindst, forstår jeg slet ikke problemet i udgangspunktet. Hvad er det, du har problemer med i Safari - og er det overhovedet noget, der bør løses på denne måde?

/mvh
</bole>
Avatar billede mejer140 Nybegynder
28. februar 2009 - 18:02 #2
Det skal først og fremmest siges, at jeg ikke er nogen videre erfaren programmør - så der skal skam nok være meget af det, jeg laver, der er uforståeligt :)

Jeg forstår heller ikke selv, hvis det skal være nødvendigt. Men mit problem består i, at Safari browseren opfatter det anderledes end ie og firefox, hvis jeg fx skriver:

<img src"test.jpg" width="200" height="100%" />

Hvis billedet oprindeligt er fx 400x400 pixel resizer ie og firefox til 200x200, hvorimod Safari laver det til 200x400.
Det er mit hovedproblem, som jeg simpelthen ikke har kunnet finde nogen løsning på.

Så har jeg i stedet prøvet at lave en funktion i min replace-funktion, hvor jeg kan beregne den absolutte værdi, så der ikke behøver være %-tegn.

Angående fejlmeddelelser får jeg ingen, da koden som sådan fungerer godt nok. Den finder bare ikke nogen %-tegn i $width eller $height, selvom der bør være det.
Hvis jeg i funktionen i stedet returnerer de oprindelige værdier, fungerer det fint (men så indeholder det jo stadig %-tegnet):
$returner = 'src="'.$src.'" width="'.$width.'" height="'.$height.'"';

Jeg tror ikke jeg mangler nogen argumenter i preg_match, da jeg har testet det med selv at skrive en streng ind som fx "100%", hvor den fint opfangede %-tegnet.
Avatar billede olebole Juniormester
28. februar 2009 - 18:20 #3
Problemet er i udgangspunktet, at du resizer billeder med HTML. Det er af mange grunde altid noget møg. Det er som sagt ikke Safari, der fejler - men dig, der bruger en dårlig løsning  =)

Derudover er det en god, gammel regel, aldrig at blande enheder i HTML-attributter - så Safari reagerer blot forventeligt. At '100%' fungerer, som det gør i IE og FF, savner enhver logik i forhold til virkemåden af anden HTML/CSS/JS.
Avatar billede olebole Juniormester
28. februar 2009 - 18:21 #4
- og så tænkte jeg mig i øvrigt ikke om med hensyn til preg_match. Den kræver naturligvis kun to argumenter  =)
Avatar billede olebole Juniormester
28. februar 2009 - 18:22 #5
Hvorfor laver du ikke bare billederne i de størrelser, du skal bruge?
Avatar billede olebole Juniormester
28. februar 2009 - 18:31 #6
Hvis vi lige tager, hvad standarden siger, så skal billedet her:

<div style="width:1000px;height:300px">
    <img src="..." alt="..." width="50%" height="200">
</div>

- blive 500px bredt og 200px højt.

Da browserne dog altid har haft yderst proprietære måder at tolke den slags på, har 'reglen' altid lydt: Bland ikke enheder!
Avatar billede olebole Juniormester
28. februar 2009 - 18:34 #7
- og så ser det forøvrigt ud til, at du forsøger dig med XHTML. Visuelle attributter blev allerede deprecated i HTML 4.01, så hvis du skriver XHTML, der faktisk skal parses som X(HT)ML, skal bredde og højde sættes med CSS
Avatar billede mejer140 Nybegynder
28. februar 2009 - 18:36 #8
Okay tak for svaret.

Men det er fordi siden er lavet til en ikke-html-kyndig mand, der skal kunne indsætte billeder ved fx at skrive [billede]navn,vidde,højde[/billede], og der vil han gerne kunne bruge det med fx 100%, så han ikke behøver regne højden ud, så proportionerne forblive de samme..

Så umiddelbart ser det ud til, at jeg bliver nødt til at implementere min funktion, hvordan det så end skal kunne lade sig gøre.

Jeg tror problemet ligger i, at når jeg i eregi_replace funktionen bruger \\1, returnerer den værdien i en eller anden speciel format (for mig i hvert fald speciel), som jeg så ikke vil kunne finde et %-tegn i.
Avatar billede olebole Juniormester
28. februar 2009 - 19:13 #9
Hvis billedet findes i præcis den størrelse, det skal bruges i, vil det da give endnu mere mening for en 'ikke-html-kyndig'  =)

Enten må han lære at ændre størrelsen på billedet til det, han faktisk har brug for (det er der yderst let anvendelige programmer, som kan) - eller også må du sørge for at resize billerne, serverside.
Det andet vil altid blive noget skod og ligne noget, der aldrig har været meningen! HTML er elendigt at resize billeder med - og hvis du er i tvivl om det, så tæl spørgsmålene i (D)HTML-kategorien om netop dét emne  ;o)
Avatar billede mejer140 Nybegynder
28. februar 2009 - 23:31 #10
Ja okay, jeg kan godt se, at det nok er den jeg skal have gang i. Men så kommer problemet med, at jeg har brug for flere parametre i min funktion, så jeg både skal bruge \\1,\\2 osv. Men jeg har fået den hjælp, jeg havde brug for.

I må gerne begge oprette et svar, så får I point. Tak for hjælpen.
Avatar billede olebole Juniormester
01. marts 2009 - 14:27 #11
Jeg tror, det var en kommentar til en anden tråd - men tillader mig at lægge et svar her også  =)
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