webentwicklung-frage-antwort-db.com.de

Problem mit hebräischen Zeichen im Benutzernamen

Ich habe ein Plugin geschrieben, um hebräische Zeichen in Benutzernamen zu aktivieren. Dies ist der vollständige Code:

add_filter ('sanitize_user', 'hu_sanitize_user', 10, 3);

//Overrides the Wordpress sanitize_user filter to allow hebrew letters and english letters only

function hu_sanitize_user ($username, $raw_username, $strict)
{
//Strip HTML Tags
$username = wp_strip_all_tags ($raw_username);

//Remove Accents
$username = remove_accents ($username);

//Kill octets
$username = preg_replace ('|%([a-fA-F0-9][a-fA-F0-9])|', '', $username);


//Kill entities
$username = preg_replace ('/&.+?;/', '', $username);

if ($strict){
    //Replace
    $username = preg_replace( '[\p{Hebrew}a-zA-Z]', '', $username );
}

//Remove Whitespaces
$username = trim ($username);

// Consolidate contiguous Whitespaces
$username = preg_replace ('|\s+|', ' ', $username);

return $username;

}

Es funktioniert gut, aber das Problem ist, dass bei einer Länge des Benutzernamens von mehr als 8 Zeichen kein Benutzer in der Benutzerliste erstellt wird. Es wird jedoch weiterhin eine Bestätigungs-E-Mail gesendet, dass der Benutzer erstellt wurde. Name und E-Mail-Adresse fehlen in der Nachricht.

Irgendwelche Ideen, was ich falsch mache?

6
DrMosko

Dies ist keine vollständige Antwort, aber es ist ein Versuch, dir eine Richtung zu geben. Hoffentlich können wir mit der Community hier eine Lösung für Sie finden!

Erstens konnte ich Ihr Problem replizieren:

  1. Ich habe Ihren Code genommen und in den functions.php meines Themas geschrieben.
  2. Ich habe den Test if( $strict ) entfernt
  3. Ich habe versucht, einen 8-stelligen hebräischen Namen zu registrieren - es hat funktioniert
  4. Ich habe Ihre Funktion entfernt und erneut versucht - es ist fehlgeschlagen (dies bestätigt, dass Ihre Funktion funktioniert)
  5. Ich habe deine Funktion hinzugefügt und mit einem 9-stelligen hebräischen Namen versucht - es fehlgeschlagen

(Für nicht-hebräische Sprecher habe ich einfach Google Translate verwendet und meinen eigenen Namen ins Hebräische übersetzt und dann die Zeichen entfernt).

Wenn es nicht funktioniert hat, war der Fehler, den ich bekam:

FEHLER: Sie konnten sich nicht registrieren ... bitte kontaktieren Sie den Webmaster!

Ich habe diesen Fehler noch nie gesehen. Es kommt von wp-includes/user.php . Dies sagt uns, dass wp_create_user() und damit wp_insert_user() entweder false oder ein Fehlerobjekt zurückgibt.

wp_insert_user() hat eine Menge Filter, die wir möglicherweise einstecken könnten, um diese Arbeit zu unterstützen. Es könnte eines davon auslösen.

Alternativ kann es sich um ein Datenbankproblem handeln. Diese StackOverflow-Antwort hat einige Ideen zur Unterstützung hebräischer Zeichen in einer MySQL-Datenbank. Meine Tabellenkodierung war bereits auf utf8_general_ci eingestellt, meine Datenbank selbst jedoch nicht. Deshalb habe ich das geändert und leider nicht aufgelöst. Ich habe auch versucht, die SET NAMES-Abfrage über wpdb auszuführen, aber es ist möglich, dass es nicht so funktionieren soll.

Wohin von hier?

Ich bin kaum ein Datenbankexperte, daher bin ich mir nicht sicher, ob dies eine Datenbankbeschränkung ist, die wir möglicherweise nicht umgehen können. Im Moment liegt die beste Chance in einem der Filter, die wp_insert_user() durchläuft.

Ich habe nicht die richtige Zeit jetzt, um diese detailliert zu durchforsten und herauszufinden, wo sie auftauchen, aber das verschafft Ihnen hoffentlich einen anständigen Vorsprung - wenn ich kann, komme ich zurück und sehe, was ich sonst noch kann finden.

1
Tim Malone