The Marlins won their third straight and moved into a second-place tie with Atlanta six games behind the Phillies in the National League East with two games remaining.
Cantu singled in two runs in the first inning and added a sacrifice fly in the eighth.
Philadelphia tied it in the bottom of the first on a two-run homer by Ryan Howard, his 44th of the year. Florida then went in front for good in the second on RBI doubles by Chris Coughlan and Cameron Maybin.
Maybin went 4-for-5 to help make a winner out of Rick VandenHurk (3-2), who allowed two runs on five hits in six innings.
Joe Blanton (12-8) suffered the loss after giving up five runs on nine hits in six-plus frames. He has allowed at least five runs in each of his last two starts.
The division-winning Phillies saw their home record slip to 44-35. They have had a better road record (48-33) than they have had in their own stadium.