Am I understanding this correctly.
The User can have a signature which is stored in DB and when he fills out the message the signature is seen on the bottom of the text field.
Problem is then if the area where the signature is can be edited by the user.
If so you must most likely revert to some client side technique where you can monitor if changes are made to the signature so you what yo should search for in the form.
Anyway, your issue with loosing the Message was I not able to reproduce since I ran into problem with preg_replace.
My test however using regular string functions worked out ok in plain php
$message = "This is supposedly a message from the form text field with
a signature on the bottom
looking like this:";
$signature = "---------------------
My Signature";
$TestString = $message . $signature;
echo substr($TestString, 0, strpos($TestString, $signature)) . $signature;
but when using a form construct the message is lost here as well.
echo '
<textarea name=message>
'.substr($_GET['message'], 0, strpos($_GET['message'], $sign)) . $sign.'
</textarea>';
It could very well be a chicken & egg type of problem since $GET['message'] is referring to the text area which we want to populate it with data from $GET['message']....
Sorry for not being of any help.