• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:textareaタグに入力された改行コードの扱い)

ブラウザごとの改行コードの差異によるMySQLへのINSERT時の文字数の問題

このQ&Aのポイント
  • PHPとMySQLを利用して簡単なWEBアプリを作っています。ブラウザごとで改行コードが異なるため、MySQLのtableにINSERTされる文字数が異なってしまいます。改行コードを1文字と解釈し、ブラウザによる差異をなくす良い方法はありませんか?
  • 質問者は、textarea内の文字列をMySQLにINSERTする際、使用しているブラウザによって改行コードの文字数が異なるため、MySQLにINSERTされる文字数が異なってしまう問題を抱えています。質問者は、ブラウザによって出力される改行コードが異なるため、MySQLのtableにINSERTされる文字数が異なってしまうことに悩んでいます。質問者は、改行コードを1文字と解釈し、ブラウザによる差異をなくす良い方法を知りたいと思っています。
  • 質問者は、PHPとMySQLを使って簡単なWEBアプリを作成中ですが、ブラウザごとに改行コードが異なるため、MySQLのtableにINSERTされる文字数が異なってしまう問題に直面しています。質問者は、改行コードを1文字として解釈し、ブラウザによる差異をなくすための方法を知りたいと考えています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

>ブラウザによって出力される改行コードが異なるため、MySQLのtableにINSERTされる文字数が異なってしまいます。 >改行コードを1文字と解釈し、ブラウザによる差異をなくす良い方法はありませんか? 改行コードを1文字と解釈しなければいけない必然性はありますか? 改行コードを6文字(<br />)と解釈してもいいのでは? ということで >--MySQL仕様-- ><textarea>内のデータを、MySQLのとあるtableにINSERTする。 >そのtableの<textarea>のデータを登録するcolumnにvarchar(1000)を指定している。 を、 <textarea>内のデータを、 \r\n は、<br />に置き換えてから \nは、<br />に置き換えてから MySQLのとあるtableにINSERTする。 >--PHP仕様-- ><textarea>内のデータをPOSTより受け取り、其の生データを上記設定したcolumnにINSERTする。 ここで、上記の「置き換え」をしてもよいはず。 >(文字数チェックの際、\r\nを\nに変換し、改行コードを1文字として解釈させ、カウントしている。) どうしても改行を1文字と数えたければ、<br />の数を数えて、総文字数から5×<br />の数を引けばよい。 >そのデータを訪問者が閲覧できるようにpreg_replaceで改行コードを<br />に変換し表示している。 変換不要なはず。 >INSERTされたデータは再編集できるよう、編集ページを設けている。 といった方法ではどうでしょうか?

noname#245598
質問者

お礼

回答ありがとうございます。参考になります。 >改行コードを1文字と解釈しなければいけない必然性はありますか? >改行コードを6文字(<br />)と解釈してもいいのでは? そう指摘されてしまえば確かにおっしゃるとおりです。改行コード(\r\n/\r/\n)、これらについて<br />のように6文字として扱えばcolumnのデータも途中で破棄されずに済みます。 しかしながら、ブログツールのように一度DBに登録した内容を再編集のために再度<textarea>内に表示させるにはpreg_repaceなどで置換が必要であるため、改行コードを<br />としてINSERTしてしまうのは2度手間のように感じていました。また、過去のことで情報の出所は忘れてしまいましたが、ユーザーの入力データをDBに登録する時には生データの方が扱いやすい場合もあるということで、極力変換せず、不正コードは除去した後、生のままINSERTした方がよいという考えがありました。 また、なぜ「改行文字を1文字として扱いたいのか」という考えにたどり着いたのかといいますと、私が参考にしているWEBシステムで、入力した文字数をカウント表示し、視覚的に今何文字入力しているのか確認できるようJavascriptで実装していたためです。一応Javascriptを勉強するためにオライリーの本を購入し、「onkeyup」でカウント、そして表示。その際、改行文字がブラウザによって異なるため、参考サイト同様に改行文字については1文字と解釈させて表示しました。 この文字数カウントの仕様については、ユーザーサイド、サーバーサイドで同じ動作をさせることが可能になったのですが、いざDBに登録したところ、ブラウザによっては改行コードが2文字で登録され本来登録されるべき文字列が破棄されてしまう事態となってしまった次第です。 実際、企業運営のWEBアプリで文字数をカウントするJavascriptが実装されている例が多く、また、改行文字を1文字で扱っているところもあったため、DBにINSERTする際、文字列が破棄されないようにするためには、どのような方法があるのか知りたかったのです。 回答の件に戻りますが、確かに<br />として扱えば問題は解決します。しかし、訪問者がいざ入力する時、「改行文字は6文字として解釈している」という仕様に違和感は感じないものでしょうか?ウチのサイトではそういう仕様!というふうに言いきってしまえば解決はするのですが・・・。

関連するQ&A