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


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

経緯

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

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

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

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

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

調査

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

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

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

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

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

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

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

↓このように修正

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

あらためて投稿!

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

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

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

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

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

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

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

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

別の方法を探る

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

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

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

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

まとめ?

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

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

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

参考

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

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