Charles started his career after progressing through the Brentford youth system and he made his first-team debut in 2005. He was loaned out by Brentford on seven occasions and he joined the last of these, Ebbsfleet United, permanently in 2009 in a historic transfer. Six months later, a proposed transfer to York City fell through, after he decided against moving to the city. He spent another season with Ebbsfleet before signing for Stevenage in 2010.
Charles first played football aged 11 while at school, for Greenford Celtic. He later played for Drayton Manor before signing for and graduating from the Centre of Excellence at Brentford. He made his first-team debut as a left midfielder in a 2–1 victory over Hull City on 7 May 2005; the final day of the 2004–05 season. He made his first appearance of 2005–06 in the Football League Trophy against Oxford United, which finished as a 1–1 draw after extra time and a 4–3 defeat in a penalty shoot-out, while Charles played as a left-back. His first league appearance of the season came as an 88th minute substitute in a 1–1 draw with Chesterfield on 10 December 2005. He went on to play as a 32nd-minute substitute in a 3–3 draw with Bradford City on 2 January 2006, which proved to be his final appearance of the season for Brentford, which he finished with three appearances. He was loaned out to Conference South club Thurrock on 3 February 2006, where he made one appearance, in a 1–0 defeat to Weston-super-Mare. He was subsequently sent out to Yeading on a work experience deal on 16 March 2006, and he made his debut in a 2–1 defeat to Eastbourne Borough, before finishing the loan spell with six appearances. Charles signed a professional contract with Brentford on 27 June 2006.
After having made nine appearances for Brentford during 2006–07, he signed for Staines Town of the Isthmian League Premier Division on a one-month loan on 16 October 2006. He made two appearances for Staines before returning to Brentford in November 2006. He joined Conference National club Crawley Town on loan on 9 February 2007 until the end of April. He made his debut a day later after coming on as a 72nd-minute substitute in a 2–2 draw with St Albans City. He finished the loan spell with six appearances. He played for Brentford on five further occasions, which included scoring the winning goal in the 89th minute of a 4–3 victory over Port Vale, and he finished the season with 19 Brentford appearances. Brentford took up their option for his contract to be extended for another season in May 2007, before he signed a new two-year contract with the option of another year with the club in June. He signed for Sutton United of the Conference South on an initial three-month loan on 2 August 2007. He made his debut in a 1–0 defeat to Basingstoke Town. He was recalled by Brentford in September 2007, after making seven appearances for Sutton. He made his first appearance for Brentford of 2007–08 in a 2–0 victory over Chester City on 22 September 2007.
He joined Conference Premier club Ebbsfleet United on loan until the end of the season on 21 March 2008, having made 18 appearances for Brentford up to that point in 2007–08. Charles made his Ebbsfleet debut the following day as a 78th-minute substitute in a 3–1 defeat to Stevenage Borough. He started in the following match, a 2–1 victory over Cambridge United, and he finished the loan spell with nine appearances. He made one more appearance for Brentford in 2007–08, in a 1–0 away defeat to Stockport County on 3 May 2008, finishing the season with 19 appearances for the club.
Charles re-signed for Ebbsfleet after joining on loan for 2008–09 on 21 June. He fouled Simon Brown to concede a penalty kick against Wrexham on 13 September 2008, which was scored by Brown, as Ebbsfleet lost 3–2. He was sent off for a second bookable offence late into a 1–0 defeat to Histon on 6 October 2008. After his Brentford contract was cancelled he moved to Ebbsfleet permanently on 29 January 2009, after the owners of Ebbsfleet, MyFootballClub, ratified a compensation fee of £25,000, making this the first transfer in football history to be decided by a group of members. He finished the season with 44 appearances and was named Ebbsfleet's Player of the Year.
Conference Premier rivals York City made a £10,000 bid for Charles in June, which was subsequently rejected, with MyFootballClub members voting against the offer with over a 98% majority. Following this, York manager Martin Foyle said it was unlikely they would increase their offer for Charles. Ebbsfleet later agreed to sell Charles and striker Michael Gash for a combined fee of £80,000 to an unnamed club, which was revealed to be York and he was reported to have signed on 29 June 2009. However, the deal eventually fell through after Charles decided against joining the club as he did not want to relocate to York. Shortly after Ebbsfleet received an enquiry about him from an unnamed League Two club, although nothing came of this interest. He later became Ebbsfleet captain and was sent off for dissent in a 1–0 defeat to Tamworth on 21 November 2009. He made 42 appearances for Ebbsfleet during the 2009–10 as they were relegated to the Conference South.
Charles turned down a new contract with Ebbsfleet to sign for newly promoted League Two club Stevenage on a two-year contract for a compensation fee on 18 May 2010. He made his Stevenage debut in the club's 3–1 home victory against Stockport, playing 78 minutes of the match. The following week, he started against Aldershot Town, but was taken off after 38 minutes after struggling with injury. Charles returned to the starting eleven on 18 September 2010, starting in a 0–0 draw against Torquay United, Stevenage's first clean sheet of 2010–11. He scored his first goal for the club in Stevenage's 1–1 draw with Milton Keynes Dons in an FA Cup first round replay in November 2010. Charles' goal came in the fifth minute of stoppage time, taking the match to extra time and then to a penalty shoot-out, which Stevenage won 7–6. Charles received a straight red card for a professional foul on John Johnson in Stevenage's 1–0 home loss to Northampton Town on 11 December 2010, just ten minutes after coming on as a substitute. He scored his second goal for Stevenage in the club's fourth round FA Cup tie against Championship team Reading, cutting inside and curling the ball past the outstretched arm of Adam Federici to restore parity in a match that Stevenage went on to lose 2–1. Charles scored his first league goal of 2010–11 with a shot from 12 yards in Stevenage's 2–1 home win against Bradford City on 2 April 2011. He provided the assist for Joel Byrom's goal after flicking a right-wing cross in Stevenage's 2–0 play-off victory over Accrington Stanley, a match in which he also hit the crossbar with a strike from 30 yards out. Charles started upfront for Stevenage in the 2011 League Two play-off Final, played at Old Trafford on 28 May 2011. Charles' pass through to John Mousinho resulted in the only goal of the match, as a 1–0 victory over Torquay United meant Stevenage were promoted to League One. He played 33 matches for Stevenage during 2010–11, scoring four goals.
After starting in both of Stevenage's opening fixtures of 2011–12, Charles signed a contract extension on 11 August 2011, keeping him contracted to the club until 2013. Two days later, Charles scored his first goal of the season with a close range header in a 1–1 draw away at Chesterfield. Charles' appearances were sporadic throughout the remainder of 2011, with the player suffering from a knee injury. He made his first start in nearly two months in Stevenage's 1–0 away victory against Reading at the Madejski Stadium in the FA Cup on 7 January 2012, with Charles scoring the winning goal in the first-half with a finish from the edge of the area. Charles' season ended prematurely after he suffered a hamstring injury in Stevenage's 1–1 draw with Wycombe Wanderers on 31 March 2012, with the injury ruling him out of action for up to six weeks. He made 34 appearances during the season, scoring five times.
Ahead of 2012–13, Charles signed a new two-year contract with the club. He started in the club's first match of the season, a 3–1 home win over AFC Wimbledon in the League Cup, playing the whole match at left-back. He scored his first goal of the season in a 1–1 draw against Shrewsbury Town on 1 September 2012, after cutting in from the wing to strike into the top corner to restore parity in the match. It turned out to be his only goal of the season as Charles played most of the season at left-back, making 41 appearances during the season. With a year remaining on his current deal, Charles' contract was extended for a further year in June 2013, keeping him contracted to the club until the summer of 2015. He made a goalscoring start to 2013–14, scoring after pouncing on a loose ball in a 4–3 home defeat to Oldham Athletic on the opening day of the season.
Charles signed for newly promoted League One club Burton Albion on a one-year contract on 19 June 2015. Having failed to appear for Burton, he joined League Two club AFC Wimbledon on loan until the end of 2015–16 on 17 March 2016. Charles started for AFC Wimbledon as they beat Plymouth Argyle 2–0 at Wembley Stadium in the 2016 League Two play-off Final, meaning they were promoted to League One for the first time.
On 31 May 2016, Charles signed for AFC Wimbledon permanently after a successful loan spell at the club. He scored his first goal for AFC Wimbledon in a 2–1 loss to Scunthorpe United on 16 August 2016.
Charles was named in the England national C team, who represent England at non-League level, in May 2009, for the final of the 2007–09 International Challenge Trophy against Belgium. He started the match to make his debut as England were beaten 1–0. Charles was called up to the team for a friendly against the Poland Olympic team in November 2009, and started the match as England won 2–1. This was the final of his two caps for England C.
Charles' preferred position is centre back, although he can also play as a left back, left midfielder or centre forward.
Charles was born in Ealing, London. His footballing hero when growing up was Ronaldo, and this was because he could "change any game with one bit of genius". He supports Manchester United, and states that the 1999 UEFA Champions League Final between Manchester United and Bayern Munich was the best match he has ever watched. Charles' ex-partner was pregnant as of July 2009.As of match played 5 August 2017
StevenageFootball League Two play-offs: 2010–11
AFC WimbledonFootball League Two play-offs: 2015–16
IndividualEbbsfleet United Player of the Year: 2008–09