2011-08-31 5 views
1

J'essayais d'utiliser preg_replace sur une chaîne mais j'obtiens un mauvais résultat.Problème de regex PHP

$string = "Da venerdì 26 agosto a lunedì 5 settembre 2011"; 
$string = preg_replace('/\p{L}+/s','',$string); 

devrait retourner "26 5 2011" mais il retourne "¬ 26 ¬ 5 2011"

* Remarque dans mon serveur php local sous Windows XP tout fonctionne bien mais dans mon serveur distant php sur Debian il me renvoie la mauvaise chaîne

Pouvez-vous m'aider?

+0

essayer d'ajouter 'drapeau I' ... la' ¬ 'symbole peut être une lettre majuscule :-D – Teneff

+2

Cela ressemble à un problème de charset dans votre entrée (¬ ressemble à un char multi-octets, qui est affiché sous la forme de deux caractères différents); utilisez UTF-8 et définissez 'mbstring.func_overload = 7' dans votre php.ini pour utiliser les remplacements de fonctions multi-octets en PHP. – feeela

Répondre

2

Vous souhaitez extraire le numéro de la chaîne de ce que je vois.

  • vous avez des problèmes d'encodage avec vos textes. Ces caractères devraient être UTF8, mais ils se sont foutus. Peut-être que vous les avez de la DB et les tables de DB ne sont pas UTF8?
  • Si vous voulez extraire tous les nombres, ne supposez pas qu'une chaîne est composée uniquement de lettres et de chiffres. Regardez http://www.regular-expressions.info/unicode.html pour une liste des types de caractères pris en charge
  • d'utilisation preg_replace("/[\s]+/", ' ', preg_replace('/[^0-9\s]/',' ',$string)); pour enlever quoi que ce soit non numéro de la chaîne, et de laisser un seul espace de séparation entre les numéros