[PHP] base64_encode werkt niet in IE

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gardocki
  • Registratie: Oktober 2000
  • Niet online
Goedenavond :)

Ik heb een stukje code die niet doet wat ik wil in IE:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php    

$string = 'blaat';    
$im     = imagecreatefrompng("images/blaat.png");    
$black = imagecolorallocate($im, 0, 0, 0);    
$px     = $string;    imagestring($im, 4, $px, 5, $string, $black);    
    
ob_start(); 
ImagePNG($im); 
$png = ob_get_contents(); 
ob_end_clean(); 

$base64 = chunk_split(base64_encode($png)); 
print("[img]\"data:image/png;base64,"[/img]"); 

?>

Zoals je ziet wil ik tekst 'on the fly' over een transparante PNG leggen en dan de afbeelding laten weergeven. Dit gaat perfect in Opera en Firefox, maar in IE krijg ik een mooi kruisje. Ik heb zitten zoeken naar een oplossing en ik kwam tegen dat IE base64-encoding niet ondersteunt. Nu is mijn vraag: hoe kan ik dit oplossen?

Wat ik niet wil:

• header("Content-Type: image/png"); erbij is geen optie omdat anders m'n hele PHP code word gezien als PNG
• Ook is het geen optie om eerst de PNG op te slaan, en dan weer te geven. Ik wil dat het persé 'on the fly' gebeurd.

Hebben jullie enig idee in welke richting ik het moet zoeken?

They made me do it.


Acties:
  • 0 Henk 'm!

Verwijderd

Kan je het plaatje niet in een aparte image.php laten generen en die dan met de <img>-tag oproepen?

Dus image.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

header("Content-Type: image/png\r\n");

$string = $_GET['text'];
$im     = imagecreatefrompng("images/blaat.png");     
$black = imagecolorallocate($im, 0, 0, 0);     
$px     = $string;    imagestring($im, 4, $px, 5, $string, $black);     

ImagePNG($im); 
?>


pagina:
HTML:
1
[img]"image.php?text=blaat"[/img]


[edit]
Ik bedenk me net dat je op deze manier wel het probleem krijgt dat iedereen elke tekst op het plaatje kan zetten door de text-variable te veranderen...
Als dat erg is zou je misschien met een id-systeem kunnen werken, zodat elke tekst een eigen id krijgt en bij een niet bestaande id een errorplaatje komt.

[ Voor 31% gewijzigd door Verwijderd op 06-03-2004 00:23 ]


Acties:
  • 0 Henk 'm!

  • Gardocki
  • Registratie: Oktober 2000
  • Niet online
Verwijderd schreef op 06 maart 2004 @ 00:19:
Kan je het plaatje niet in een aparte image.php laten generen en die dan met de <img>-tag oproepen?
Ik denk van niet. Het is namelijk niet voor één plaatje op een pagina, maar voor meerdere. Dus ik denk niet dat dat werkt dan..

Ik zal trouwens even uitleggen waarvoor het precies is. Het is voor een gastenboek, waar nu de emailadressen plain op het beeld verschijnen. Nu wil ik de emailadressen omtoveren naar een PNG zodat de emailadressen (redelijk) spamsafe zijn.

They made me do it.


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Wat je dan ook kunt doen:
HTML:
1
2
3
4
5
6
7
8
9
10
<a href="mailto:skaah(at)example(dot)com" onclick="mailto(this);">email mij</a>
<script type="text/javascript">

function mailto(el) {
 t = el.getAttribute('href');
 t = t.replace(/\(dot)/g,'.');
 t = t.replace(/\(at)/g,'@');
 el.setAttribute(href,t);
}
</script>
Of gelijksoortige oplossingen. Veel base64 code meesturen geeft wel erg veel overhead voor zoiets simpels.

[ Voor 53% gewijzigd door Skaah op 06-03-2004 14:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Tom S. schreef op 06 maart 2004 @ 13:40:
[...]

Ik denk van niet. Het is namelijk niet voor één plaatje op een pagina, maar voor meerdere. Dus ik denk niet dat dat werkt dan..

Ik zal trouwens even uitleggen waarvoor het precies is. Het is voor een gastenboek, waar nu de emailadressen plain op het beeld verschijnen. Nu wil ik de emailadressen omtoveren naar een PNG zodat de emailadressen (redelijk) spamsafe zijn.
Volgens mij maakt het verder niet uit hoe vaak je dat script oproept, probleem is alleen wel dat je voor elke plaatje weer een nieuwe instantie van je script opgeroepen wordt en er dus wat meer overhead bij komt kijken.

Het proces werkt volgens mij zo:
- browser stuurt request om pagina
- server parst gastenboek, stuurt html-code op
- browser komt bij het parsen van html [img]"image.php?text=een@blaat.com"[/img] tegen
- browser stuur request om plaatje
- server genereert plaatje voor een@blaat.com, stuurt het op
- browser komt bij het parsen van html [img]"image.php?text=twee@blaat.com"[/img] tegen
- server genereert plaatje voor twee@blaat.com
enzovoort


Maar in dit geval is het inderdaad niet handig, want als je het voor het 'verstoppen' van emaildressen gebruikt zal je in je source steeds image.php?text=name@host.com, waardoor het adres nog steeds onveranderd in de html-source staat...

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Verwijderd schreef op 06 maart 2004 @ 20:33:
[...]
Maar in dit geval is het inderdaad niet handig, want als je het voor het 'verstoppen' van emaildressen gebruikt zal je in je source steeds image.php?text=name@host.com, waardoor het adres nog steeds onveranderd in de html-source staat...
De perfecte plek voor base64 en- en decoding. Of nog een stapje moeilijker: base64(gzip(crypt($string))) en dan terug base64decoden, unzippen en decrypten. Speaking of overkill.

Acties:
  • 0 Henk 'm!

  • Gardocki
  • Registratie: Oktober 2000
  • Niet online
Verwijderd schreef op 06 maart 2004 @ 20:33:
[...]


Volgens mij maakt het verder niet uit hoe vaak je dat script oproept, probleem is alleen wel dat je voor elke plaatje weer een nieuwe instantie van je script opgeroepen wordt en er dus wat meer overhead bij komt kijken.

Het proces werkt volgens mij zo:
- browser stuurt request om pagina
- server parst gastenboek, stuurt html-code op
- browser komt bij het parsen van html [img]"image.php?text=een@blaat.com"[/img] tegen
- browser stuur request om plaatje
- server genereert plaatje voor een@blaat.com, stuurt het op
- browser komt bij het parsen van html [img]"image.php?text=twee@blaat.com"[/img] tegen
- server genereert plaatje voor twee@blaat.com
enzovoort


Maar in dit geval is het inderdaad niet handig, want als je het voor het 'verstoppen' van emaildressen gebruikt zal je in je source steeds image.php?text=name@host.com, waardoor het adres nog steeds onveranderd in de html-source staat...
Dat lijkt mij idd geen praktische oplossing. En tevens is het voor mij denk ik iets te hoog gegrepen, als je snapt wat ik bedoel ;)
Skaah schreef op 06 maart 2004 @ 13:59:
Wat je dan ook kunt doen:
HTML:
1
2
3
4
5
6
7
8
9
10
11
<a href="mailto:skaah(at)example(dot)com" onclick="mailto(this);">
email mij</a>
<script type="text/javascript">

function mailto(el) {
 t = el.getAttribute('href');
 t = t.replace(/\(dot)/g,'.');
 t = t.replace(/\(at)/g,'@');
 el.setAttribute(href,t);
}
</script>
Of gelijksoortige oplossingen. Veel base64 code meesturen geeft wel erg veel overhead voor zoiets simpels.
Ik denk dat ik een variant op deze ga doen. M'n idee is om alleen de @ te vervangen door een afbeelding met een @ erop. Dus zoiets in PHP:
PHP:
1
$email = ereg_replace("@", "[img]'images/apestaartje.png'[/img]", $email);

Zo zou het in principe ook veilig moeten zijn, denk ik. In dit geval hoef ik maar één plaatje op te slaan en het is voor mij iets simpeler om te implementeren.

[ Voor 6% gewijzigd door Gardocki op 07-03-2004 12:58 ]

They made me do it.


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Tom S. schreef op 07 maart 2004 @ 12:58:
[...]

Ik denk dat ik een variant op deze ga doen. M'n idee is om alleen de @ te vervangen door een afbeelding met een @ erop. Dus zoiets in PHP:
PHP:
1
$email = ereg_replace("@", "[img]'images/apestaartje.png'[/img]", $email);

Zo zou het in principe ook veilig moeten zijn, denk ik. In dit geval hoef ik maar één plaatje op te slaan en het is voor mij iets simpeler om te implementeren.
Ja, maar zo kun je geen aanklikbare links maken.

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Skaah schreef op 07 maart 2004 @ 13:49:
[...]

Ja, maar zo kun je geen aanklikbare links maken.
Het kan wel; alleen staat het email adres dan weer in de source ;) Sowieso begrijp ik niet waarom de TS de email adressen zo graag weer wil geven; alleen een beveiliging van de link (zoals Skaah een voorbeeld geeft) is voldoende :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Gardocki
  • Registratie: Oktober 2000
  • Niet online
Skaah schreef op 07 maart 2004 @ 13:49:
[...]

Ja, maar zo kun je geen aanklikbare links maken.
Hmm, dat is waar. Dat stukje javascript doet het trouwens niet. Ik krijg wel een mooi linkje, maar als ik erop druk dat zie je nog steeds in een emailprogramma "blaat(at)blaat(dot).nl" ipv "blaat@blaat.nl". Terwijl dat scriptje die (at) en die (dot) juist moet vervangen door een @ en . voor zover ik kan zien.

[ Voor 4% gewijzigd door Gardocki op 07-03-2004 14:39 ]

They made me do it.


Acties:
  • 0 Henk 'm!

Verwijderd

usericon.php?id=12345

Het e-mail adres van betreffende user haal je uit de database, en verwerk je server-side. De client hoeft alleen het nummer te weten.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Tom S. schreef op 07 maart 2004 @ 14:39:
[...]

Hmm, dat is waar. Dat stukje javascript doet het trouwens niet. Ik krijg wel een mooi linkje, maar als ik erop druk dat zie je nog steeds in een emailprogramma "blaat(at)blaat(dot).nl" ipv "blaat@blaat.nl". Terwijl dat scriptje die (at) en die (dot) juist moet vervangen door een @ en . voor zover ik kan zien.
Dat doettie onClick. Dus pas nadat je erop geklikt hebt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1