28. februar 2009 - 17:11Der 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:
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?
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)
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?
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.
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.
- 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
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.
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)
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.
Jeg tror, det var en kommentar til en anden tråd - men tillader mig at lægge et svar her også =)
Synes godt om
Ny brugerNybegynder
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.