Portsmouth had been deservedly ahead through Andrés D'Alessandro's goal after 40 minutes and appeared to be cruising.
Part of Charlton's problems came from the need to reorganise twice during the opening 45 minutes. Portsmouth who were able to assume control of the match emerged for the second half full of confidence as everything had seemed to be going according to plan.
There seemed little hope of a Charlton comeback before Alan Curbishley changed his formation, pushing Herman Hreidarsson forward and giving Darren Ambrose a free role. The switch paid off with the home side's late surge, as Darren Bent did the damage, creating the equaliser for Bryan Hughes then scoring the decisive second.