アプリ版:「スタンプのみでお礼する」機能のリリースについて

テキストエリアから登録した情報をテキストファイルに保存しています。
ただ、テキストエリア内で改行した場合、そのままテキストファイルにも反映され書き出す際に整合性が取れなくなって困っております。

例えば、メッセージがこの4行で一つのセットの情報なのに、

```
おはよう
こんにちは
こんばんは
```

表示する場合には、「おはよう」の1行目のみが取得され2行目以降は別の投稿となってしまいます。
こういった場合にはどのように対応を行うのが一般的な方法でしょうか?

テキストファイルに保存の際は以下で保存し、
fwrite($fp, $name . "\t" . $message . "\n");


書き出しはこのようにしています。
while (($line = fgets($fp))) :
$value = explode("\t", $line);
echo $value[x];


恐らく表示する際の1行の目印は末尾の\nをとってくると思うので、テキストエリア内の改行は何かに変える?などして保存し、書き出す際に<br>とかに変換して書き出すのでは?などと考えたりしておりますが、具体的な方法や、正しい?改行の指定方法が分からず…。

お詳しい方いらっしゃいましたらアドバイス頂けますと助かります。
宜しくお願いいたします。

A 回答 (1件)

一般的には、入力値は保存先にあわせて符号化(Encode)する必要があります。


ご提示の場合はタブ区切りテキスト形式への保存と思われますので、TSV にて意味のあるタブ文字や改行文字などを無害化する符号化が必要です。

案1) preg_replace を使い、タブ文字や改行文字だけを符号化
案2) urlencode を使い、記号類すべてを符号化
案3) base64_encode を使い、文字列全体を符号化
案4) gzdeflate を使って圧縮してから案3と同様に符号化
    • good
    • 0
この回答へのお礼

有難うございます。

基本的なルールなど大変参考になりました、保存先に合わせて考えるのですね。
今回は、preg_replace で改行とタブを何もない状態に置換する方法で対応いたしました。
根本的なルールが少しわかり感謝申し上げます、有難うございました。

お礼日時:2022/11/20 21:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!