Reading lost for the first time in six games after dominating the first half.
Preston goalkeeper Andrew Lonergan made an early save from left winger Stephen Hunt after just five minutes and Reading keeper Marcus Hahnemann parried a Jon Parkin 20-yard shot two minutes later.
Reading hit the bar in the 12th minute when a Kevin Doyle cross was headed by Noel Hunt from six yards against the woodwork.
Chris Sedgwick fouled Chris Armstrong and a free-kick from the left by Stephen Hunt was headed by Doyle from 12 yards towards goal but the Preston keeper tipped it around the post.
Reading were awarded a penalty on 26 minutes when Sean St. Ledger fouled Noel Hunt and his brother Stephen placed a left-foot penalty into the bottom corner for his sixth goal of the season.
Preston had been up against it in the first half but received some good luck in the 55th minute when an innocuous Sedgwick cross led to a collision between Ivar Ingimarsson and keeper Marcus Hahnemann.
The ball ended in the bottom corner of the net with Ingimarsson credited with the own goal.
The Preston keeper punched away a Stephen Hunt in-swinging corner and Hahnemann made saves from a Parkin header and a Jay McEveley cross.
Noel Hunt had a right-foot volley from 12 yards pushed away and the Reading keeper made more saves from Sedgwick and a Billy Jones 25-yard shot which he tipped around the post.
Ross Wallace assisted with a right-wing corner and Stephen Elliott made it 2-1 to the home side with nine minutes to go with a 12-yard left-foot shot.
With two minutes to go, Noel Hunt headed against the post from 12 yards but Preston held out.