Antworten auf deine Fragen:
Neues Thema erstellen

[PHP] wieso liefert ord() für ä,ö,ü den gleichen Wert

rilight

Noch nicht viel geschrieben

Hallo liebes Forum !


Ich programmiere schon recht lange mit PHP, habe aber erst seid ein paar wochen einen MAC. Mir scheind so, als würde die ord() Funktion unter Mac eine andere Ausgabe liefern als unter Windows.
Ich bin mir nicht ganz sicher, bilde mir aber ein, dass ich mit Hilfe der ord() Funktion ä, ö, ü sauber trennen konnte (Windows).

Ich habe eine HTML Seite mit <meta charset="ISO-8859-1"> in der ein Textarea enthalten ist. Das Formular wird an eine php Datei gesendet um den Inhalt zu speichern. In dem Zug wollte ich gleich die Umlaute: ä,ö,ü - Ä,Ö,Ü - ß in ihre HTML-Versionen Umwandeln.
Also dachte ich einfach ord() und dann nach den ASCII Werten unterscheiden.

Dann kam aber das Problem:

Wieso liefert ord() für ä,ö,ü,Ä,Ö,Ü,ß immer 195 ?

Laut ASCII Tabelle:
ä - 228
ö - 246
ü - 252
Ä - 196
Ö - 214
Ü - 220
ß - 223

rilight
 

Duddle

Posting-Frequenz: 14µHz

AW:
PHP:
 wieso liefert ord() für ä,ö,ü den gleichen Wert[/b]

Scheinbar verhält sich da PHP etwas seltsam: [url]http://www.php.net/manual/en/function.ord.php#42942[/url]

Wenn du aber sowieso nur die Umlaute in HTML-Entities umwandeln willst, gibt es direkt [URL="http://www.php.net/manual/en/function.htmlentities.php"]htmlentities()[/URL], welches z.B. Ä in &Auml; umwandelt.


Duddle
 

tr4ze

Mod | Forum

Teammitglied
PSD Beta Team
AW:
PHP:
 wieso liefert ord() für ä,ö,ü den gleichen Wert[/b]

Weil ord() nicht Multibyte fähig ist. 
Umlaute sind im ascii standard nicht enthalten(0-127).
Was du meinst ist Unicode.Das musst du erst umwandeln.

[PHP]
function uniord($u) {
    $k = mb_convert_encoding($u, 'ISO-8859-1', 'UTF-8');
    $k1 = ord(substr($k, 0, 1));
    $k2 = ord(substr($k, 1, 1));
    
    return $k2 * 256 + $k1;
} 

echo iconv("ISO-8859-1","UTF-8", chr(uniord('ä'))).' : '.uniord('ä').'<br/>';
echo iconv("ISO-8859-1","UTF-8", chr(uniord('ö'))).' : '.uniord('ö').'<br/>';
echo iconv("ISO-8859-1","UTF-8", chr(uniord('ü'))).' : '.uniord('ü').'<br/>';
echo iconv("ISO-8859-1","UTF-8", chr(uniord('Ä'))).' : '.uniord('Ä').'<br/>';
echo iconv("ISO-8859-1","UTF-8", chr(uniord('Ö'))).' : '.uniord('Ö').'<br/>';
echo iconv("ISO-8859-1","UTF-8", chr(uniord('Ü'))).' : '.uniord('Ü').'<br/>';
echo iconv("ISO-8859-1","UTF-8", chr(uniord('ß'))).' : '.uniord('ß').'<br/>';
 

rilight

Noch nicht viel geschrieben

AW:
PHP:
 wieso liefert ord() für ä,ö,ü den gleichen Wert[/b]

Danke für eure Antworten.

Mit der Funktion htmlentities hatte ich schon immer so ein wenig Probleme,
denn auch unter Windows hat sie nie die Umlaute konvertiert.

Bei folgendem Code:

[PHP]
<?php

header('Content-type: text/html; charset=ISO-8859-1');

echo htmlentities('ä - ö - ü - Ä - Ö - Ü - ß');

?>
... entsteht folgende Ausgabe im Quelltext:

&Atilde;&curren; - &Atilde;&para; - &Atilde;&frac14; - &Atilde;„ - &Atilde;– - &Atilde;œ - &Atilde;Ÿ

@tr4ze
Ich bilde mir aber ein, dass unter Windows die Umlaute korrekt erkannt wurden. Ich nutze auch auf meinem MAC wieder XAMPP.
Besteht die Möglichkeit, dass es eventuell an der Kodierung der Datei liegt?
Laut Editor müsste es UTF-8 sein.
 

m_c

Nicht mehr ganz neu hier

AW:
PHP:
 wieso liefert ord() für ä,ö,ü den gleichen Wert[/b]

[quote="rilight, post: 1921575"]...Besteht die Möglichkeit, dass es eventuell an der Kodierung der Datei liegt?
Laut Editor müsste es UTF-8 sein.[/QUOTE]Das sieht man ja schon, denn es geht immer mit &Atilde; los.
 

rilight

Noch nicht viel geschrieben

AW:
PHP:
 wieso liefert ord() für ä,ö,ü den gleichen Wert[/b]

Ich habe es jetzt so gemacht wie oben vorgeschlagen:

- wenn 195 von ord() zurückgegeben wird, dann
- Zeichen danach prüfen und das jeweilige Sonderzeichen einsetzen


Danke für eure Hilfe !
rilight
 

netbandit

Aktives Mitglied

AW:
PHP:
 wieso liefert ord() für ä,ö,ü den gleichen Wert[/b]

Auch wenn es scheinbar erledigt ist, Tipp:

[PHP]
htmlentities($str, ENT_QUOTES, 'UTF-8');
 

rilight

Noch nicht viel geschrieben

AW:
PHP:
 wieso liefert ord() für ä,ö,ü den gleichen Wert[/b]

Hi und Danke @netbandit,

ich habe es gerade nochmal ausprobiert und diese Lösung vereinfach das ganze sehr.
Danke für den Tipp !!!

rilight
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
118.612
Beiträge
1.538.343
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben