◆ フォームのスペースを no break space (U+00A0) にして送る
◆ コピペされてもただのスペースなので見る側の影響を気にせず使える
  ◆ ちゃんとスペースが反映されてるだけでデメリットなし  なはず 

white-space:pre; になっていなくて 連続するスペースが半角スペースひとつぶんになるものってよくありますよね
改行は反映してくれているのになぜか スペース表示は対応していない 全角スペースにすればできるけど気持ち悪い
そんなあなたにスペースを表示させる方法をお教えします!

できることは半角スペースを表示させることです
タブとか改行は無理です

方法

半角スペース (U+0020) の代わりに no break space (U+00A0) をフォームに入力して送信します

no break space は HTML でいう   なので半角スペースが表示されます
サーバの処理にもよりますが 半角スペースが表示されないところは基本的に 何もしないからそうなっています
何もしない場合は no break space を送信すれば ブラウザでそのデータを見るとそのまま no break space です

なので 半角スペースがそのまま表示されているはずです

コピーした時

特殊な半角スペースだとコピーしたときにも no break space のままでなんか気持ち悪い って思うかもしれません

ですが 普段から空白を表示するためにあらゆるところに   は使われてます
それでも no break space とスペースの違いを意識しないでも困っていないと思います
それはブラウザがコピーするときに全部ただのスペースとしてコピーしているからです

なので 特に見る側(使う側)のことを考えず no break space を書き込んで大丈夫です

入力方法

ではどうやって no break space を入力するの?ってところですが
単純に   と書いても普通はだめです

「<」や「&」といった文字をそのまま表示させるために 何もしないサーバでも最低限のエスケープはしているはずです
そうなると &nbsp; は &amp;nbsp; という文字になって &nbsp; とそのまま表示されます
かと言って キーボードでは普通の半角スペースと全角スペースしか入力できないですし 「スペース」を変換しても半角スペースと全角スペースしかありません

no break space をコピペしてくればいいじゃん という考えが浮かびそうですが それは難しいです
上で書いたように ブラウザで no break space をコピーしても ただのスペースになります
ネット見ないで no break space なんて適当なファイル見てもあるものじゃないですよね

そんなわけで 文字コード表から「U+00A0」の文字を取ってくるしかないと思います
ですが面倒ですよね
Google IME なら IME が有効の状態で「U+00A0」と入力して変換すれば変換できます
それ以外の人はがんばって文字コード表から取り出してください