I use OxyClean (industrial strength) to clean them. Let them soak, then use a bottle brush. Repeat if necessary. The OxyClean will leave a residue. It is harmless, but looks unsightly. So, I rinse completely, then set the bottles on the tree to dry.
Once they are cleaned, then sanitization is in order. I use the dishwasher, on the dry cycle. I go through 2 cycles to be extracareful. This is the sanitizing step, it does not clean them.
In fact, running the bottles through the entire dishwasher cycle (with no soap) won't clean them. The water can't get into all the places good enough to clean.
This is especially important the older the bottles get. Older equipment has a higher chance of growing mold spores and other contaminants. Because of this, I clean the bottles with water and a brush after I use them, then repeat the cleaning (with the OxyClean) before I sanitize them for bottling.