<?php
$pattern ='/([^&]+)=([^=]+)(?=$|&[^=]+=)/';
$test = array(
'name=Shake & Bake&difficulty=easy',
'name=Shake&Bake&difficulty=easy',
'difficulty=easy&name=Shake & Bake',
'difficulty=easy&name=Shake&Bake',
'name=Shake&Bake',
'difficulty=easy',
'name=Shake&Bake&foo&difficulty=easy',
'name=Shake&Bake&difficulty=easy&',
'name=Shake&Bake&difficulty='
);
foreach($test as $foo) {
preg_match_all($pattern, $foo, $m);
echo $foo, "\n";
for($i=0; $i<count($m[0]); $i++) {
echo ' ', $m[1][$i], ' =$gt; "', $m[2][$i], "\"\n";
}
echo "\n";
}
?>
produit
name=Shake & Bake&difficulty=easy
name => "Shake & Bake"
difficulty => "easy"
name=Shake&Bake&difficulty=easy
name => "Shake&Bake"
difficulty => "easy"
difficulty=easy&name=Shake & Bake
difficulty => "easy"
name => "Shake & Bake"
difficulty=easy&name=Shake&Bake
difficulty => "easy"
name => "Shake&Bake"
name=Shake&Bake
name => "Shake&Bake"
difficulty=easy
difficulty => "easy"
name=Shake&Bake&foo&difficulty=easy
name => "Shake&Bake&foo"
difficulty => "easy"
name=Shake&Bake&difficulty=easy&
name => "Shake&Bake"
difficulty => "easy&"
name=Shake&Bake&difficulty=
name => "Shake&Bake"
qui semble fonctionner (sauf difficulté = pas adaptée dans le dernier exemple).
Je ne suis pas sûr qu'une correspondance de sous-masque unique améliore la vitesse. Vous pourriez vouloir regarder ceci.
il est standard de citer esperluette devrait être cité comme &. Ne pas le faire vous causera des maux de tête importants. –
Voir ma solution mise à jour. – cletus