1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

麻里子さまのおりこうさま!に投稿できなかった話

Posted at

正確には、エラー原因を探って何とか投稿した話です。

経緯

麻里子さまのおりこうさま! とは、毎回 決められたテーマについて、
150字以内で解説するテレビ番組です。(現在 番組は終了。)

その時は「NPO」の解説を募集していました。
視聴者からの投稿を受け付けるwebの「フォーム」があり、
私もそのフォームから投稿しようとしました。

麻里子さまに「おりこうさま」されたくて、解説文を何度も書き直し、
文字数制限ギリギリの145字くらいにまとめました。
ハンドルネーム等の必要事項を入力し、いざ投稿ボタンを押しました。

エラー「150字以内にしてください」

おっかしいなぁ。たしかに150字以内に まとめてるんだけど。

調査

半角文字が まぎれているのか?
いや それはない。すべて全角文字だ。

じゃ、UTF-8 の3バイトや4バイト文字が入っているのか?
ありえない。Shift_JIS で普通に文章を書いているのだから。

しばし考えた後、ある仮説が浮かび上がる。

「改行文字をカウントしてる・・・?」

いや、それは なかろう。ふつう150字といったら印字可能な文字数だ。
改行文字など数えない。第一、NHKの投稿フォームだぞ。
こんなエラー出てたらクレームですぐ修正するだろう。

私は半信半疑で、改行だけを消して投稿してみました。

NPOとはかくかくしかじか。
だからNPOとはかくかくしかじか。
つまりNPOとはかくかくしかじかなのです。

↓このように修正

NPOとはかくかくしかじか。だからNPOとはかくかくしかじか。つまりNPOとはかくかくしかじかなのです。

あらためて投稿!

・・・正常に投稿されました。

やはり改行文字をカウントしていたようです。
(なんてこった :dizzy_face:

改行を省いた文字数チェック?

上記のフォームはもう存在しませんが、
仮にPHPだったとすると、改行除去はこんな感じ。

preg_replace('/[\r\n]/','',$data)

ただ この方法の場合、ちょっと不安です。
文章に大量の改行が含まれていてもOKだからです。

:
(大量の改行)
(大量の改行)
(大量の改行)
あいうえお
(大量の改行)
(大量の改行)
(大量の改行)
:

文字数チェックの後、元々の文章をDB等に保存するはずなので、
改行だらけの文章が通ってしまいます。

別の方法を探る

システム側の都合ですが、150字というのを、
改行を含めたチェックにしたらどうでしょう?

注意書きに
150字(改行含む)
として、運用で逃げたほうが楽です。
テキスト入力が身近になった現代ならOKかも・・・

いや、やはりダメです。
PHPで試すと、改行1つを2文字でカウントしてしまいます。
( CR と LF で2文字。)

改行するたびに2文字も余計に加算されます。
さすがに これは文字数の無駄です。
せめて1文字でカウントされるなら運用で逃げるのに。

まとめ?

結局、テキストの文字数チェックは、

・改行を省いて文字数チェックする。
・必要なら、改行を含む全体のバイト数もチェックする。

というのが一応の解決策ですかねぇ・・・。

参考

ツイートの文字数を厳密に数える方法

Railsの文字数のバリデーション問題を解決する 改行文字が2文字と換算されてしまう場合の対処方法

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?