UTF8 oder ISO-8859-1, das ist hier die frag....
bauchidgw
- php
hallo
ich hab ne frage auf die ich mir aufgrund fehlender einarbeitung in das thema nicht wirklich helfen kann.
sagen wir ein client übergibt (z.b.: ein grps-handybrowser z.b.: openwave) übergibt einen string in utf8-codierung
ein andere client hingegen in ISO-8859-1
wie erkenn ich ob der string jetzt in utf8 oder iso kodiert ist?
danke für ev. hinweise
mfg
bauchidgw
abend,
(http://www.php.net/manual/de/function.utf8-decode.php)
---zitat---
I needed a way to found out if the actual string contains
Unicodechars or not before trying utf8_decode on the string,
because if it is not you will get the ugly ?-marks.
To solve this, I made this function which works for me.
function smart_utf8_decode($in_str)
{
// Replace ? with a unique string
$new_str = str_replace("?", "q0u0e0s0t0i0o0n", $in_str);
// Try the utf8_decode
$new_str=utf8_decode($in_str);
// if it contains ? marks
if (strpos($new_str,"?")>0)
{
// Something went wrong, set new_str to the original string.
$new_str=$in_str;
}
else
{
// If not then all is well, put the ?-marks back where is belongs
$new_str = str_replace("q0u0e0s0t0i0o0n", "?", $new_str);
}
return $new_str;
}
---zitat---
mfg,
(tanz das)
Z.N.S.
gott-O-gott
hab ich das tatsächlich im manual übersehen
1000end dank und gute nacht
mfg
bauchidgw
Hallo bauchidgw,
ich hab ne frage auf die ich mir aufgrund
fehlender einarbeitung in das thema nicht
wirklich helfen kann.
Dem kann abgeholfen werden.
wie erkenn ich ob der string jetzt in utf8 oder
iso kodiert ist?
So ohne weiteres gar nicht. Du kannst dich mit
dem Wuerg-Around behelfen, den Z.N.S. gepostet
hat, aber prinzipiell ist das nicht moeglich. Das
ist leider eine der Schwaechen von HTTP. Was du
allerdings tun kannst, ist folgendes: du sendest
einen sinnvollen Content-Type header
(Content-Type: text/html; charset=charset) und
setzt per accept-encoding fest, welche Charsets
du akzeptierst:
<form method="GET" accept-charset="ISO-8859-15,UTF-8">
Per Definition darf dir dann nichts anderes
geschickt werden als ISO-8859-15 oder UTF-8.
Danach fuehrst du ein Formular-Feld ein,
meinetwegen 'cs', das nur ein Entity enthaelt:
<input type="hidden" name="cs" value="ÿ">
Dieses Entity ist in ISO-8859-1 bzw. ISO-8859-15
kodiert "\377". In UTF-8 kodiert ist es
"\303\277". So kannst du also pruefen, in welchem
Charset die Sachen geschickt wurden.
Gruesse,
CK