[PHP] htmlentities bij ajax call

Pagina: 1
Acties:
  • 141 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem is dat bij ajax calls de tekst formatting corrupt raakt bij het terugzenden van de gegevens.
Ik probeerde daarom met de functie htmlentities() de tekst te strippen.
code:
1
2
3
4
function tekstOmzetten($tekst){
    $tekst = htmlentities($tekst, ENT_QUOTES);
    return $tekst;
}

Maar als ik dat doe geeft hij een lege string terug.

Als ik echter deze functie gebruik, lukt het wel:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function tekstOmzetten($tekst){
    $tekst = str_replace('€','€',$tekst);  
    $tekst = str_replace('*','*',$tekst);
    $tekst = str_replace('+','+',$tekst);
    $tekst = str_replace('/','/',$tekst);
    $tekst = str_replace('%','%',$tekst);
    $tekst = str_replace('-','-',$tekst);
    $tekst = str_replace('©','©',$tekst);
    $tekst = str_replace('Ø','Ø',$tekst);
    $tekst = str_replace('–','–',$tekst);
    $tekst = str_replace('º','º',$tekst);
    $tekst = str_replace('®','®',$tekst);
    $tekst = str_replace('°','°',$tekst);
    $tekst = str_replace('•','•',$tekst);
    $tekst = str_replace('™','™',$tekst);
    $tekst = str_replace('ë','ë',$tekst);
    $tekst = str_replace('’','´',$tekst);
    $tekst = str_replace('“','“',$tekst);
    $tekst = str_replace('„','„',$tekst);
    $tekst = str_replace('"','"',$tekst);
    $tekst = str_replace('”','”',$tekst);
    $tekst = str_replace('ï','ï',$tekst);
    $tekst = str_replace('·','·',$tekst);
    $tekst = str_replace('²','²',$tekst);
    $tekst = str_replace('³','³',$tekst);
    $tekst = str_replace('×','×',$tekst);
    $tekst = str_replace('é','é',$tekst);
    $tekst = str_replace('É','É',$tekst);
    return $tekst;
}


Maar dat is erg omslachtig. Ik moet nu voor elk tekentje zo'n lijn toevoegen.
Daarom dat htmlentities() mij een veel eenvoudigere oplossing leek?

Weet er iemand wat ik kan doen om die functie htmlentities() toch aan de praat te krijgen?

[ Voor 5% gewijzigd door Verwijderd op 05-07-2007 15:22 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Verwijderd schreef op donderdag 05 juli 2007 @ 15:20:
Het probleem is dat bij ajax calls de tekst formatting corrupt raakt bij het terugzenden van de gegevens.
Waarom probeer je dan niet eerst te achterhalen waarom dat het geval is, in plaats van het symptoom proberen te bestrijden met dergelijke ranzige workarounds?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
htmlentities werkt gewoon goed. Dat je je request via ajax doet of niet.
* BasieP verdenkt je JS of character settings ervan dat ze je tekst te mollen.

[ Voor 9% gewijzigd door BasieP op 05-07-2007 15:24 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 19-09 21:26

DataGhost

iPL dev

En ook al is het de verkeerde aanpak van het probleem wil ik toch even reageren op die gigantische lading str_replace calls... je kan str_replace aanroepen met 2 arrays, dat scheelt een heleboel calls.

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Dit probleem heb ik ook als ik met ajax bv een redirect doe naar
code:
1
page.php?a=1&b=2

dan werkt het ook niet. Ik denk dat je met JS ná het verzenden van de string moet decoden.

[ Voor 6% gewijzigd door Megamind op 05-07-2007 15:40 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op donderdag 05 juli 2007 @ 15:23:
[...]

Waarom probeer je dan niet eerst te achterhalen waarom dat het geval is, in plaats van het symptoom proberen te bestrijden met dergelijke ranzige workarounds?
Dat heb ik gedaan door die ranzige methode te proberen.
BasieP schreef op donderdag 05 juli 2007 @ 15:23:
htmlentities werkt gewoon goed. Dat je je request via ajax doet of niet.
* BasieP verdenkt je JS of character settings ervan dat ze je tekst te mollen.
Mja inderdaad, want de functie op zich voert hij nu succesvol uit.
DataGhost schreef op donderdag 05 juli 2007 @ 15:29:
En ook al is het de verkeerde aanpak van het probleem wil ik toch even reageren op die gigantische lading str_replace calls... je kan str_replace aanroepen met 2 arrays, dat scheelt een heleboel calls.
Inderdaad, maar dat was sowiso een tijdelijke oplossing.
Copy/paste werkt dan even snel :)

[ Voor 7% gewijzigd door Verwijderd op 05-07-2007 15:49 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik ben collega van de TS. We gebruiken Dojo.io.bind in combinatie met mimetype text/html.

code:
1
2
3
4
5
dojo.io.bind({
    url: "assets/modules/loginAjax.php?vergeten="+waarde,
    load: function(type, data, evt){ vervang(data); },
    mimetype: "text/html"
});


Het zou natuurlijk beter zijn als we niets zouden moeten encoden maar in de Dojo documentatie worden mimetypes nauwelijks uitgediept.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
OK het werkt nu min of meer, maar toch doet hij sommige HTML-chars NIET...
Het ™-teken skipt hij bijvoorbeeld, terwijl het ï-teken wel geconverteerd wordt.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Verwijderd schreef op donderdag 05 juli 2007 @ 15:44:
Ik ben collega van de TS. We gebruiken Dojo.io.bind in combinatie met mimetype text/html.

code:
1
2
3
4
5
dojo.io.bind({
    url: "assets/modules/loginAjax.php?vergeten="+waarde,
    load: function(type, data, evt){ vervang(data); },
    mimetype: "text/html"
});


Het zou natuurlijk beter zijn als we niets zouden moeten encoden maar in de Dojo documentatie worden mimetypes nauwelijks uitgediept.
Het gaat hier niet om mimetype maar om een character-encoding mismatch ergens tussen client en server. Met welke encoding worden de pagina's geserveerd? Welke encoding wordt er eventueel in de database gebruikt? Met welke encoding worden Ajax-responses geserveerd?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Je hebt niets te maken met mimetypes, je hebt te maken met charsets, dat is iets heel anders...

Hmm, crisp was ietsjes sneller :+

[ Voor 16% gewijzigd door Alex) op 05-07-2007 15:57 ]

We are shaping the future


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Megamind schreef op donderdag 05 juli 2007 @ 15:39:
Dit probleem heb ik ook als ik met ajax bv een redirect doe naar
code:
1
page.php?a=1&b=2

dan werkt het ook niet. Ik denk dat je met JS ná het verzenden van de string moet decoden.
dit is ook gewoon fout.
dwz, & is een html teken, en hoort niet in een url. Wanneer jij in je browser blaat.nl/?p=1&i=3 doet dan zal hij ook fout gaan ;)

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

BasieP schreef op donderdag 05 juli 2007 @ 16:00:
[...]

dit is ook gewoon fout.
dwz, & is een html teken, en hoort niet in een url. Wanneer jij in je browser blaat.nl/?p=1&i=3 doet dan zal hij ook fout gaan ;)
Inderdaad; HTML-encoding hoef je enkel te doen in een HTML-serialisatie.

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Probeer dit eens nadat je script het resultaat binnen heeft.
JavaScript:
1
alert(xmlhttprequest.getAllResponseHeaders());


Oh, schiet me net te binnen kijk eens welke charset het script dat je opvraagt heeft.

[ Voor 25% gewijzigd door Verwijderd op 05-07-2007 16:11 ]


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
BasieP schreef op donderdag 05 juli 2007 @ 16:00:
[...]

dit is ook gewoon fout.
dwz, & is een html teken, en hoort niet in een url. Wanneer jij in je browser blaat.nl/?p=1&i=3 doet dan zal hij ook fout gaan ;)
Ja en nee, een url moet het idd niet instaan, maar ik heb gezien dat een valide XHTML pagina een href moet bevatten met &amp

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Klopt niet helemaal, je bedoelt t alleen wel goed.

Een & in een url kan best, anders kun je de pagina die je bouwt niet valid xhtml krijgen omdat een & niet geldig is. Als je echter vanuit javascript een call doet naar een server moet je die & niet gebruiken en toch gewoon & nemen. Dat zou moeten werken.

Acties:
  • 0 Henk 'm!

Verwijderd

crisp schreef op donderdag 05 juli 2007 @ 15:57:
[...]

Het gaat hier niet om mimetype maar om een character-encoding mismatch ergens tussen client en server. Met welke encoding worden de pagina's geserveerd? Welke encoding wordt er eventueel in de database gebruikt? Met welke encoding worden Ajax-responses geserveerd?
Hartelijk bedankt.

code:
1
header("Content-Type: text/html;charset=utf8");

Loste het probleem volledig op.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Cartman! schreef op donderdag 05 juli 2007 @ 16:13:
Klopt niet helemaal, je bedoelt t alleen wel goed.

Een & in een url kan best, anders kun je de pagina die je bouwt niet valid xhtml krijgen omdat een & niet geldig is. Als je echter vanuit javascript een call doet naar een server moet je die & niet gebruiken en toch gewoon & nemen. Dat zou moeten werken.
pssst dit forum heeft de 'handige' functie om html chars (dus &) om te zetten naar de betekenis ervan (dus &)
je verhaal slaat nu echt als een tang op een varken ;)

[ Voor 4% gewijzigd door BasieP op 05-07-2007 19:15 ]

This message was sent on 100% recyclable electrons.

Pagina: 1