(.*) bouffe tout ce qu'il peut, aussi quand tu en mets plusieurs tu peut avoir des problèmes.
Essaye:
$texte = ereg_replace ("mods/dossiers/([^_]+)_([0-9]+).html", "mobile/dossier.php?id=\\2", $texte);
- ([^_]+) : suppose que le 1er argument contient au moiins 1 caractère, et ne contient pas le caractère ``_``
- ([0-9]+) : suppose que le 2ème argument est composé d'un ou plusieurs chiffres
Si je fais de mauvaises suppositions sur le 1er argument, essaye preg_replace avec:
(.+?)
qui au lieu de manger tous les caractères possibles, ne prends que le minimum nécessaire.
Exemple:
$texte = preg_replace ("@mods/dossiers/(.+?)_([0-9]+).html@", "mobile/dossier.php?id=\\2", $texte);