A defender, Charles began his career with Brook House before being signed by Crewe Alexandra. However, he never made a first team appearance for the club. He returned to the south of England in 2001, and played for several non-league clubs, winning the Isthmian League Premier Division with Aldershot Town in the 2002–03 season. Charles then joined Farnborough Town, before joining Barnet during their Conference promotion season of 2004–05. Charles was loaned to Aldershot Town for the end of the 2006–07 season, his second spell with the club and made the deal permanent after being released by Barnet. He was a championship winning defender in the 2007–08 season, and in recognition of this feat he was named in the Conference Premier team of the year along with Aldershot's Nikki Bull, Ben Harding, Lewis Chalmers and John Grant. At the end of the 2007–08 season, Charles signed a new two-year contract. Charles was a regular starter for Aldershot Town, in their first season back in the Football League and he was rewarded with a double award by winning the Supporters ClubPlayer of the Season Award and Players Player Award. In June 2010, Charles signed a new one-year contract with Aldershot Town. Charles sustained a knee injury during Aldershot's last game of the 2010–11 campaign at Lincoln City. The injury would keep him out for at least six months and with his contract expiring in July 2011, he was not offered a new deal. Charles joined Northampton Town in March 2012 on an initial contract to the end of the season. He signed a new one-year contract in May. Having made 20 appearances in all competitions, Charles left the club in January 2013 after having his contract terminated, and joined Plymouth Argyle for the remainder of the 2012–13 season. He made 11 appearances for the club before being released at the end of the campaign. Charles joined Conference Premier side Luton Town on a one-year contract on 19 June 2013. He suffered with injuries throughout the 2013–14 season, but made eight appearances as Luton won promotion to League Two. On 9 May 2014, it was announced that Charles would not be offered a new contract and would leave Luton the next month. On 3 October 2014 he joined Nuneaton Town. After playing in 11 fixtures at Nuneaton, in which they won 4, drew 6 and lost 1, he moved to Worcester City in March 2015, until the end of the season. He moved to sign for Halesowen Town in the Northern Premier League ahead of the following season. After featuring heavily for The Yeltz, he was released in October 2015, subsequently joining Stratford Town. He was released at the end of the season, joining Halesowen Town. However, during the 2016–17 close-season he joined Walton & Hersham in the Combined Counties Football League, making his debut on 6 August 2016 in the FA Cup Extra Preliminary Round against Westfield. He joined Rugby Town from The Swans in October 2016, and made his debut away at Stocksbridge Park Steels. He left Rugby Town in May 2017.