Halladay (2-2) allowed two runs, walked two and struck out six to record a complete game. He's had consecutive strong outings after starting the season with two poor ones.
The two-time Cy Young Award winner is coming off an injury-plagued, subpar year, but has looked like his old self this week.
Jimmy Rollins, Ben Revere, Humberto Quintero and John Mayberry Jr. each had two hits for the Phillies, who busted out of their slump with five runs off Jaime Garcia (1-1) in the first inning.
Carlos Beltran and Matt Holliday hit solo homers for the Cardinals.
The game was called after a 35-minute rain delay before the bottom of the seventh.