Mark Buehrle (10-11) achieved the 10-win milestone on his sixth try, extending his streak reaching double digits in victories to 12 consecutive years. The left-hander allowed two runs in seven innings.
Miami ended a franchise-record scoring drought after 30 innings, including three consecutive shutout losses, when Dobbs hit an RBI single in the fourth. His fourth homer with two out in the sixth put Miami ahead 3-2.
Giancarlo Stanton had two hits, scored once and drove in a run. Austin Kearns added a two-run pinch-hit single in Miami's six-run eighth, and Bryan Petersen hit a two-run double.
Ryan Webb completed a five-hitter by pitching the ninth for the last-place Marlins, who went 2-4 on their homestand.
Ty Wigginton hit his 10th homer and drove in both runs for the Phillies.
Halladay (6-7) was backed by a lineup sprinkled with reserves. He allowed three runs in seven innings.
The game was only the 12th between starting pitchers who had thrown perfect games, so it was no surprise runs were hard to come by early.
Halladay lost track of balls and strikes and thought he had a 3-2 count on Carlos Lee after throwing ball four, but the pitcher's appeal was in vain. Lee went to third on a double by Stanton and scored on Dobbs' single. Donovan Solano followed with a sacrifice fly.
Dobbs had three hits and improved his lifetime average against Halladay to .583 (7 for 12).
Stanton singled home a run in the eighth off B.J. Rosenberg, who gave up three runs.
Notes: Marlins CF Justin Ruggiano left the game in the fourth inning with a strained right abdominal muscle. His status is day to day. ... Of the Phils' past 32 homers, 23 have been solo shots. ... Phillies LHP Cliff Lee is scheduled to start Thursday at Milwaukee. He's 0-1 with a 5.54 ERA in four starts against the Brewers. ... Miami's John Buck struck out three times and is batting .120 in day games.