nl2br() does not infact get rid of the line breaks, if you read the definition of what it does, it simply says that it places a <br> before each ascii line break.
I have realised there was a rather important bit missing in my code (I wrote it late last night!). It doesn't actually do anything between the explode and implode.
What it needs to do is strip the first character from each part of the array.
Does anybody know how to do this? I know you can use trim() to to remove blank space, but do line breaks count as blank space, I assume they do not. Would it be possible to use something like ereg_replace() to replace the linebreaks with something? Would it be possible to just use a function like that at the start, without using nl2br() just replacing the line breaks with <br>s?