web-dev-qa-db-fra.com

Problème avec les caractères hébreux dans le nom d'utilisateur

J'ai écrit un plugin pour activer les caractères hébreux dans les noms d'utilisateurs. C'est le code complet:

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;

}

Cela fonctionne bien, mais le problème est que si la longueur du nom d'utilisateur est supérieure à 8 caractères, cela ne crée pas d'utilisateur dans la liste des utilisateurs. Cependant, il envoie toujours un e-mail de confirmation indiquant que l'utilisateur a été créé - avec le nom et l'adresse e-mail manquants dans le message.

Des idées que je fais mal?

6
DrMosko

Ce n'est pas une réponse complète, mais c'est une tentative de vous donner une direction. Espérons qu'avec la communauté ici nous pouvons trouver une solution pour vous!

Tout d'abord, j'ai pu reproduire votre problème:

  1. J'ai pris votre code et l'ai placé dans le functions.php de mon thème pour l'instant.
  2. J'ai enlevé le test if( $strict )
  3. J'ai essayé d'enregistrer un nom hébreu à 8 caractères - cela a fonctionné
  4. J'ai retiré votre fonction et essayé à nouveau - cela a échoué (cela confirme que votre fonction fonctionne)
  5. J'ai ajouté votre fonction et essayé avec un nom hébreu de 9 caractères - it failed

(pour les non-hébreux suivants, je viens d'utiliser Google Traduction et de traduire mon propre nom en hébreu, puis de supprimer des caractères).

Lorsque cela ne fonctionnait pas, l'erreur que j'ai eu était la suivante:

ERREUR: Impossible de vous inscrire… veuillez contacter le webmaster!

Je n'ai jamais vu cette erreur auparavant. Il vient de wp-includes/user.php . Ce que cela nous dit, en parcourant l'ordre de ceci, est que wp_create_user(), et par conséquent wp_insert_user(), renvoie soit un objet false, soit un objet error.

wp_insert_user() dispose de beaucoup de filtres que nous pourrions potentiellement brancher pour faciliter ce travail. C'est peut-être en train de trébucher.

Sinon, il peut s'agir d'un problème de base de données. Cette réponse StackOverflow a des idées pour supporter les caractères hébreux dans une base de données MySQL. Mon encodage de table était déjà défini sur utf8_general_ci mais ma base de données elle-même ne l'était pas, alors j'ai changé cela et malheureusement, cela ne l'a pas résolu. J'ai aussi essayé d'exécuter la requête SET NAMES avec wpdb , mais il est possible que ce ne soit pas censé fonctionner comme ça.

Où partir d'ici

Je suis à peine un expert en base de données, je ne suis donc pas sûr qu'il s'agisse d'une limitation de la base de données qui pourrait ne pas nous permettre de nous déplacer. Pour le moment, je pense que la meilleure chance réside dans l'un de ces filtres que wp_insert_user() utilise.

Je n'ai pas le temps de passer au crible {maintenant _ pour approfondir ces recherches et déterminer où tout va bien, mais j'espère que cela vous donne une longueur d'avance décente - si je peux, je reviendrai pour voir quoi d'autre Je peux trouver.

1
Tim Malone