Großschreibung von Namen sauber normalisieren
Bernd Wurst

Bernd Wurst commited on 2025-10-03 12:16:25
Zeige 4 geänderte Dateien mit 54 Einfügungen und 4 Löschungen.

... ...
@@ -12,7 +12,6 @@ if (!isset($_SESSION['phone']) || !isset($_SESSION['firma']) && !isset($_SESSION
12 12
 
13 13
 $content = '';
14 14
 $kunde = [];
15
-$_SESSION['lname'] = ucwords($_SESSION['lname']);
16 15
 if (isset($_SESSION['lname']) && !isset($_SESSION['kundennr'])) {
17 16
     $kunde = suche_kunde($_SESSION['lname'], $_SESSION['phone']);
18 17
     if ($kunde) {
... ...
@@ -0,0 +1,50 @@
1
+<?php
2
+
3
+function namen_korrigieren($name) {
4
+    $name = trim($name);
5
+    if (empty($name)) {
6
+        return '';
7
+    }
8
+
9
+    // Wenn CAPS-Lock an war, korrigieren wir das
10
+    // Wir entfernen nicht-alphab. Zeichen, um nur die Buchstaben zu prüfen.
11
+    // Wir verwenden mb_strtoupper() und mb_strtolower() für Multibyte-Sicherheit.
12
+    $nur_buchstaben = preg_replace('/[^a-zA-ZäöüÄÖÜß]/', '', $name);
13
+
14
+    if (!empty($nur_buchstaben) && $nur_buchstaben === mb_strtoupper($nur_buchstaben, 'UTF-8')) {
15
+        // Wenn alle Buchstaben Großbuchstaben sind (Caps-Lock aktiv),
16
+        // wandeln wir den gesamten Namen in Kleinbuchstaben um, um ihn zu "resetten".
17
+        $name = mb_strtolower($name, 'UTF-8');
18
+    }
19
+
20
+    // Ersten Buchstaben jedes "Wortes" groß schreiben, den Rest belassen
21
+    $name = preg_replace_callback(
22
+        '/([\s\'\-]|^)([a-zA-ZäöüÄÖÜß])/',
23
+        function ($matches) {
24
+            // Schreibe den Buchstaben im zweiten Match-Teil groß (Multibyte-sicher)
25
+            return $matches[1] . mb_strtoupper($matches[2], 'UTF-8');
26
+        },
27
+        $name
28
+    );
29
+
30
+    // Spezielle Präfixe (Artikel) in Kleinbuchstaben umwandeln
31
+    $praefixe = array(
32
+        'An', 'Am', 'Von', 'Van', 'De', 'Da', 'Ten', 'Zu', 'Vom', 'Zum', 'Zur', 'Der', 'Die', 'Das'
33
+    );
34
+
35
+    foreach ($praefixe as $prefix) {
36
+        // Suchmuster: Wortgrenze, Präfix, Leerzeichen
37
+        $pattern = '/\b(' . preg_quote($prefix, '/') . ')\s/i';
38
+
39
+        $name = preg_replace_callback(
40
+            $pattern,
41
+            function ($m) {
42
+                // Präfix in Kleinbuchstaben umwandeln und Leerzeichen beibehalten
43
+                return mb_strtolower($m[1], 'UTF-8') . ' ';
44
+            },
45
+            $name
46
+        );
47
+    }
48
+
49
+    return $name;
50
+}
... ...
@@ -1,6 +1,7 @@
1 1
 <?php
2 2
 require_once "lib/api.php";
3 3
 require_once "lib/auftrag.php";
4
+require_once "lib/helper.php";
4 5
 if (!file_exists("../data/".date("Y"))) {
5 6
     mkdir("../data/".date("Y"));
6 7
 }
... ...
@@ -78,11 +79,11 @@ if (isset($_REQUEST['form'])) {
78 79
         case 'start':
79 80
             $lname = '';
80 81
             if (isset($_REQUEST['lname']) && trim($_REQUEST['lname']) != '') {
81
-                $lname = trim($_REQUEST['lname']);
82
+                $lname = namen_korrigieren($_REQUEST['lname']);
82 83
             }
83 84
             $fname = '';
84 85
             if (isset($_REQUEST['fname']) && trim($_REQUEST['fname']) != '') {
85
-                $fname = trim($_REQUEST['fname']);
86
+                $fname = namen_korrigieren($_REQUEST['fname']);
86 87
             }
87 88
 
88 89
             $number = '';
... ...
@@ -82,7 +82,7 @@ if ($_SESSION['neue'] == '3er') {
82 82
     $abfuellung = 'Sie haben uns folgende Nachricht hinterlassen:<br><blockquote>'.$_SESSION['sonstiges'].'</blockquote>';
83 83
 }
84 84
 
85
-$adresse = $_SESSION['fname'].' '.$_SESSION['lname'];
85
+$adresse = $_SESSION['lname'].', '.$_SESSION['fname'];
86 86
 if ($_SESSION['fname'] == 'bekannt') {
87 87
     $adresse = $_SESSION['lname'];
88 88
 }
89 89