2011-06-20 5 views
0

私は、ユーザが自分の入力を書き込んでデータベースに保存することを可能にするテキストエリアを持っています。データベース入力のためのテキストエリアのコピーされたタブを検出する

ユーザーの大部分は、単語や同様のプログラムからテキストをコピーします。単語や同様のプログラムでは、タブもテキストエリアにコピーされます。

タブがデータベースに保存されると、自動的にタブが1つのスペースに変換されます。

タブを適切なタブとしてデータベースに保存するか、または設定した空白数で保存したいのですが、最初にタブをキャッチできません。

これは、しかし、私は私ので、タブはしてもキャッチされていないことを伝えることができ、私は(ユーザからの入力を取得した後、データベースに保存する前に)これまで

str_replace("\t", " ", $string); 
str_replace(chr(9), "  ", $string); 

を試してきたものですこれを試してください:

if (strpos($string, "\t") !== false) 
{ 
    exit("The tab was found"); 
} 

'exit'は呼び出されません。

私はこれに対する答えを広範囲に調査しましたが、私は修正を見つけることができませんでした。

本当にありがとうございます。

+0

"タブがデータベースに保存されると、タブは自動的に1つのスペースに変換されます。" ---この時点から発見する必要があります。データベースには、そこに置いているものがすべて格納されます。そのまま。 – zerkms

+0

'foreach($ string as $ char)は" $ char: "をエコーし​​ます。 ord($ char)。 "\ n";あなたに?実際のタブではないので、これらの文字が本当に何であるか把握できるはずです。 –

+0

問題はチェーンの遠い方です。 PHPに渡される変数に何らかの理由でタブが含まれていないようです。フォームへのリンクを投稿できますか? JavaScriptがフォームの値をPHPスクリプトに送るために使用されていますか、フォームを直接送信していますか?値を見る前に、フォームの値に前処理が行われていますか? –

答えて

1

Nathan Bellのコメント「値が表示される前にフォームの値に前処理が行われていますか?」それは私に考えさせてくれた。

私は私のPHPフレームワークとしてcodeigniterを使用しています。いくつかの研究を行うと、ソースコードを見た後、私はそうのようなセキュリティ上のクラスに建てられた...、単一のスペースに

if (strpos($str, "\t") !== FALSE) 
{ 
    $str = str_replace("\t", ' ', $str); 
} 

をすべての私のタブをフォーマットしていることが分かっだから私は、ソースコードを変更しなかったすべてのこれは

if (strpos($str, "\t") !== FALSE) 
{ 
    $str = str_replace("\t", '  ', $str); 
} 

です。だから、助けを手伝ってくれたネイサンと他の皆さん、ありがとう!

関連する問題