Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

capitale é

Pagina: 1
Acties:

  • _Moe_
  • Registratie: Mei 2006
  • Laatst online: 09:40
Ik krijg het maar niet voor elkaar om de capitale é op mijn scherm te krijgen.

é word zonder problemen getoond, maar van zodra ik er een strtoupper rond gooi in php krijg ik É terug.

De string die ik er insteek is utf-8.

Iemand een idee?

RTFM!


  • Oid
  • Registratie: November 2002
  • Niet online

Oid


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:54

Janoz

Moderator Devschuur®

!litemod

Je moet even goed voor jezelf duidelijk hebben wat je exact aan het doen bent. Dat de é zonder problemen in een html context getoond wordt betekent niet dat er ook daadwerkelijk een é in de variabele staat. Als je namelijk de source van de pagina opvraagt dan zie je dat er niet é, maar é staat. Dat de strtoupper daar vervolgens &EACUTE; van maakt is dus eigenlijk heel logisch. strupper werkt immers gewoon op de variabele alsof het gewoon letters zijn. strtoupper houdt geen rekening met eventuele html entiteiten. een <br /> zal door strtoupper ook gewoon <BR /> worden.

Je probleem zul je op moeten lossen door je tekst gewoon als tekst bij te hoduen, en niet als html encoded tekst. Helaas ben je binnen php dan wel een beetje beperkt omdat het standaard niet met UTF8 om kan gaan. Je zult daarnaast dus de, al door Oid aangehaalde, multibyte varianten van de functies moeten gebruiken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • _Moe_
  • Registratie: Mei 2006
  • Laatst online: 09:40
Dus als ik het goed begrijp moet ik de tekst buiten de html file brengen?

RTFM!


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Mag ik ook hier naar verwijzen? http://www.joelonsoftware.com/articles/Unicode.html

Anyway, je kan volgens mij gewoon eerst http://www.php.net/manual/en/function.html-entity-decode.php gebruiken, dan converteren naar uppercase (met multibyte/utf-8 functies), en dan weer http://www.php.net/manual/en/function.htmlentities.php

[ Voor 60% gewijzigd door Zoijar op 12-03-2013 16:34 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:54

Janoz

Moderator Devschuur®

!litemod

_Moe_ schreef op dinsdag 12 maart 2013 @ 16:16:
Dus als ik het goed begrijp moet ik de tekst buiten de html file brengen?
Euhm... Ja of nee. Ik denk dat je het nog niet helemaal begrepen hebt. Je huidige probleem is dat een een stuk data hebt welke binnen een html context "olé". Maar dat is niet de werkelijke vulling van de string. De werkelijke vulling is iets als "olé". De toUpperCase functie werkt op de werkelijke string, namelijk "olé", en maakt daar "OL&EACUTE;" van. Dat is compleet logisch, maar niet wanneer je het vervoglens in een HTML context weer gaat weergeven.

De fout die je maakt is dat je tekst bewerkingen los laat op html data. Om dit op te lossen heb je dus twee opties:
1 - html bewerkingen gebruiken. Hierbinnen heb je weer twee opties: Of puur html door bijvoorbeeld de style aan te passen, of zelf html bewerkings functies gaan schrijven die begrijpen dat het niet &EACUTE; moet worden, maar &Eacute; (heel erg lastig... zelfs voor Tweakers,net, maar dat zullen mijn html rechten wel zijn :))
2 - je data als tekst opslaan. Let hierbij wel op dat php niet standaard zomaar met UTF8 om kan gaan. Encoding was bij de makers van php een afterthought.

[ Voor 3% gewijzigd door Janoz op 12-03-2013 19:45 . Reden: Zelfs voor tweakers.net ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Janoz schreef op dinsdag 12 maart 2013 @ 16:43:
1 - [...] of zelf html bewerkings functies gaan schrijven die begrijpen dat het niet &EACUTE; moet worden, maar É (heel erg lastig)
Hoewel je voor optie 2 moet gaan (beter: zou hebben moeten zijn gegaan) is optie 1 nou ook weer niet héél erg lastig volgens mij (althans, in 't geval é -> É). Volgens mij wordt 't dan zoiets:

PHP:
1
echo mb_strtoupper(html_entity_decode('Ol&eacute;', ENT_COMPAT, 'UTF-8'));

of, om 't weer in "html entities vorm" te krijgen:
PHP:
1
echo htmlentities(mb_strtoupper(html_entity_decode('Ol&eacute;', ENT_COMPAT, 'UTF-8')), ENT_COMPAT, 'UTF-8');


Having said that: dit pad wil je niet in slaan.

[edit]
Wat Zoijar in "capitale é" dus zegt :P
* RobIII is wat scheel.

[ Voor 13% gewijzigd door RobIII op 12-03-2013 16:52 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

offtopic:
haha, ik zat ook vol verbazing te lezen met de gedachte 'ben ik nou gek?' Maar het is wel duidelijker zo uitgeschreven, iets dat ik niet altijd ben wegens haast :)

  • _Moe_
  • Registratie: Mei 2006
  • Laatst online: 09:40
Bedankt allen,

Het is gelukt, en zie nu in wat uppercase al dan niet juist doet :D.
Ik heb het nodige uppercase gebracht via css zoals @Janoz aanhaalde.

RTFM!


  • Cartman!
  • Registratie: April 2000
  • Niet online
De functie strtoupper deed het niet fout, jij gebruikte die functie fout... ;)

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Janoz schreef op dinsdag 12 maart 2013 @ 16:43:
[...]
Maar dat is niet de werkelijke vulling van de string. De werkelijke vulling is iets als "olé". De toUpperCase functie werkt op de werkelijke string, namelijk "olé", en maakt daar "OL&EACUTE;" van.
Wat niet opschiet is dat jij niet bedacht hebt dat als jij in t.net "&eacute;" schrijft, dat in een html-context terecht komt en dus gewoon é wordt :P In bovenstaande gevallen bedoel jij &amp;eacute;, wat dan weergegeven wordt als &eacute;.

[ Voor 3% gewijzigd door CyBeR op 13-03-2013 11:45 ]

All my posts are provided as-is. They come with NO WARRANTY at all.

Pagina: 1