The Phillies' eighth win in the past nine games left them with a half-game lead over the Mets, who lost to Atlanta 4-2. Philadelphia ended the Marlins' nine-game winning streak and dealt a blow to their faint playoff hopes.
Joe Blanton (3-0) struck out nine in five innings and left with a 3-2 lead. Ryan Madson escaped a two-on, no-out jam in the eighth, and Brad Lidge stranded a runner at second in the ninth for his 39th save in 39 chances.
Florida went 1-for-12 with runners in scoring position and struck out 16 times.
Shane Victorino hit his second homer of the series and 14th of the season for a 2-all tie in the fourth, and the Phils took the lead for good in the sixth on Gregg Dobbs' RBI single.
Anibal Sanchez (2-5) departed after 5 2-3 innings because of a cramp in his right hamstring. He allowed three runs, two earned, for the Marlins, who are five games back in the wild-card race and have only eight games left.
With the score 2-all, Sanchez walked consecutive batters in the sixth, then gave up a two-out RBI single by Dobbs. Sanchez fell to 0-4 in five career starts against the Phillies with an ERA of 8.72. Marlins rookie Cameron Maybin singled and scored but also struck out four times, dropping his average from .818 to .625.
Maybin was in the middle of a two-run rally in the third that put Florida ahead 2-1. He singled after a base hit by Alfredo Amezaga, and both came home on John Baker's double.
From there, Blanton and four relievers shut out Florida over the final 6 2-3 innings. J.C. Romero struck out Maybin and Baker to strand two runners in the seventh, and Madson escaped even more serious trouble after Jorge Cantu singled and Mike Jacobs doubled to start the eighth.
Third baseman Dobbs fielded a grounder and threw home to get Cantu. Following a groundout, a 2-2 pitch appeared to hit Cody Ross on the hand, but umpire C.B. Bucknor ruled the play a foul ball, saying the pitch hit the knob of the bat handle. Marlins manager Fredi Gonzalez argued only briefly, and after three more foul balls, Ross struck out to end the inning.
Amezaga walked to start the ninth and stole second as Dallas McPherson struck out. Lidge also struck out Maybin and Baker to close it out.
The Phillies took a 1-0 lead with an unearned run in the third. Carlos Ruiz reached on an errant throw by third baseman Cantu, and Sanchez fielded a bunt and lobbed wildly to first, putting runners at the corners.
Chase Utley hit an RBI single, but Sanchez limited the damage by retiring Jayson Werth and Ryan Howard.
Notes: Florida SS Hanley Ramirez (shoulder) missed his third game in a row and won't rejoin the lineup until Monday at the earliest, the team said. ... LHP Jamie Moyer, scheduled to start Sunday for the Phils, has won all five career starts in Miami with an ERA of 1.60. ... Foul tips twice hit Bucknor in the face mask, and he took a three-minute timeout in the ninth when it happened the second time.