| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

13-11-2010, 00:12
|
|
typhoch2
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 9
|
|
Erster Buchstabe Uppercase bei specialchars
Hi Leute,
Ich arbeite an einer Registrierung und diese ist so gut wie abgeschlossen, da fällt mir ein, dass ich ja möchte, dass der erste Buchstabe des Vor- sowie Nachnamen ja groß geschrieben sein soll. An sich ja kein Problem mit ucfirst. Nun aber das Problem. Was ist wenn der Benutzer Beispiels Özil Özen heißt? Wie kann ich solche Chars abfangen und seperat zu nem Uppercase machen?
Ich hab schon einiges ausprobiert und es auch hinbekommen mit nem normalen string.
Sieht dann ungefähr so aus:
PHP-Code:
$firstname = "özil";
$d1 = array("ä" , "ö", "ü"); $d2 = array("Ä" , "Ö", "Ü"); $firstname[0] = str_replace($d1, $d2, $firstname);
print''.$firstname.''
Nun kommt aber das noch viel größere Problem.
Meine Daten sind in nem Formular, werden dann Via Post gesendet an meine verify.php .
Dort dann erst einmal mit $_POST("var") in variablen gespeichert und weiter verarbeitet.
Problem ist nun, dass keine ä,ö,ü's ankommen, sondern beispielsweise ein %20%20zil anstelle von özil (habe mir jetzt den code nicht genau gemerkt).
Wie kann ich dass denn dort machen?
Cheers
|

13-11-2010, 01:10
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
PHP-Code:
function mb_ucfirst($str, $encoding) { return mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding) . mb_substr($str, 1, mb_strlen($str, $encoding) - 1, $encoding); }
PHP-Code:
echo mb_ucfirst('özdemir', 'UTF-8'); // Özdemir
|

13-11-2010, 21:57
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Zitat:
|
Problem ist nun, dass keine ä,ö,ü's ankommen, sondern beispielsweise ein %20%20zil
|
Das glaube ich nicht. Und falls doch, dann machst du etwas falsch!
|

13-11-2010, 23:10
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von typhoch2
Hi Leute,
Ich arbeite an einer Registrierung und diese ist so gut wie abgeschlossen, da fällt mir ein, dass ich ja möchte, dass der erste Buchstabe des Vor- sowie Nachnamen ja groß geschrieben sein soll. An sich ja kein Problem mit ucfirst. Nun aber das Problem. Was ist wenn der Benutzer Beispiels Özil Özen heißt? Wie kann ich solche Chars abfangen und seperat zu nem Uppercase machen?
|
Du musst herausfinden, was der erste Buchstabe eines Wortes ist. Für UTF-8 könnte das so gehen:
PHP-Code:
function _uc_helper(
$hits
) {
return mb_strtoupper($hits[0], 'UTF-8');
}
preg_replace_callback('/(?<=\p{L})\p{l}(?=\p{l}*)/u', '_uc_helper', $name);
Allerdings halte ich die sture Großschreibung von Wortanfängen für keine gute Idee. Es gibt Namen, deren Bestandteile klein geschrieben werden -- wie bspw. Adelstitel. Lass den Leuten doch einfach ihre Namen und deren Schreibweise.
Zitat:
|
Problem ist nun, dass keine ä,ö,ü's ankommen, sondern beispielsweise ein %20%20zil anstelle von özil (habe mir jetzt den code nicht genau gemerkt).
|
Das ist die URL-enkodierte Form von UTF-8, wenn ich jetzt mal annehme, dass dein %XX%XX in Wirklichkeit deutsche Umlaute kodiert. %20 wäre ein Leerzeichen. URL-kodierten Text wandelt man mit urldecode() in normalen Text zurück. Womit auch sonst ...
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (13-11-2010 um 23:13 Uhr)
|

15-11-2010, 19:33
|
|
typhoch2
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 9
|
|
hey danke für die Antworten  Ich habe es nun wie folgt hinbekommen:
PHP-Code:
function ucfirst_utf8($str) { if (mb_check_encoding($str,'UTF-8')) { $first = mb_substr( mb_strtoupper($str, "utf-8"),0,1,'utf-8' ); return $first.mb_substr( mb_strtolower($str,"utf-8"),1,mb_strlen($str),'utf-8' ); } else { return $str; } } $firstname = htmlspecialchars(ucfirst_utf8($firstname));
|

17-11-2010, 10:26
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Es ist ja nett, dass du dich bedankst und auch, dass du uns mitteilst, das du das Problem gelöst hast, aber ...
Zitat:
Zitat von typhoch2
hey danke für die Antworten  Ich habe es nun wie folgt hinbekommen:
PHP-Code:
function ucfirst_utf8($str) {
if (mb_check_encoding($str,'UTF-8')) {
$first = mb_substr(
mb_strtoupper($str, "utf-8"),0,1,'utf-8'
);
return $first.mb_substr(
mb_strtolower($str,"utf-8"),1,mb_strlen($str),'utf-8'
);
} else {
return $str;
}
}
$firstname = htmlspecialchars(ucfirst_utf8($firstname));
|
... wieso hast du h3lls funktionierenden Vorschlag bis zur Unkenntlichkeit verbogen anstatt ihn zu übernehmen? Wieso baust du eine UTF-8-Erkennung ein um anschließend Nicht-UTF-8-kodierte Strings einfach unmodifiziert durchzulassen? Wie erkennt dein Script, ob der erste Buchstabe in $firstname auch ein Buchstabe ist?
Auch ist mb_check_encoding() nicht zu 100 Prozent vertrauenswürdig, was UTF-8-Kodierung angeht. Das Erkennen von UTF-8 ist sowieso schwierig, wenn nicht gerade eine BOM vorangestellt ist.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|