2012-02-28 8 views
0

フォーム上にテキストエリアデータを収集しています。受信側のページでは、それを隠しフィールドに保存して、3番目のページに追加処理(メール送信、ファイル保存など)を行う必要があります。共有ホストにはマジッククォートがオンになっており、変更する必要があるので、私はstripslash()に慣れています。PHPで文字列を正規化して運ぶ最も良い方法は何ですか?

隠しフィールドを3段落のテキストで詰め込む前に、「、」、$、その他のソース(Word、RTF、InDesign、知っている人)のものと混在する前に、もちろんそれはhtmlentities()を実行すると思っているので、htmlentities()を実行してみるとうまくいくように思えます。フォームの投稿と3番目の処理ページでは、私の清掃機能が(私は私のタスク・フローの最後で処理する前に実行する/ Oそのwの別のものを持っている)HTMLエンコードである

function cleanHtmlEncodeStrings($str) 
{ 

     $text = stripslashes($str); 

     // First, replace UTF-8 characters. (borrowed from a post on the web) 
     $text = str_replace(
      array("\xe2\x80\x98", "\xe2\x80\x99", "\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x93", "\xe2\x80\x94", "\xe2\x80\xa6"), 
      array("'", "'", '"', '"', '-', '--', '...'), 
      $text 
     ); 

     // Next, replace their Windows-1252 equivalents. 
     $text = str_replace(
      array(chr(145), chr(146), chr(147), chr(148), chr(150), chr(151), chr(133)), 
      array("'", "'", '"', '"', '-', '--', '...'), 
      $text 
    ); 

     // Next, replace CR & LFs with 
     $find = array("\r\n", "\n\r", "\n", "\r", "\R" , "\t", "\x0B"); 
     $text = str_replace($find, " ", $text); 

     $text = htmlentities ($text, ENT_QUOTES, "UTF-8"); 

     return $text; 

} 

ここ。 エスケープ「愁いの距離は憧れのアーティストの感情についての本であります彼女の家のためにノースカロライナ州の「気づいていないことを気づかせることは、私が制作する作品の中で実行中のテーマです。私はそれが最も正直で、活気があり、美しいと感じるので、表面を普通にします。

になる....

愁いの距離は、ノースカロライナ州の彼女の故郷の州の憧れのARTISTA¢ï¿½ï¿½の感情についての本です。 「気づいていないことを気づかせることは、私が制作する作品の中で実行中のテーマです。私はそれが最も正直で、活気があり、美しいと感じるので、表面を普通にします。

私はなぜ彼女が入っていると思われるのか分かりませんが、私の機能によって捕らえられていません。

私の実際の質問は....これらの種類のテキスト領域を処理するための弾丸証明方法は何ですか?私は、誰かが試してみたいと思っているすべての奇妙なキャラクターを説明することはできないので、より良い方法は何ですか?

ありがとうございます! リッチ

[注:私は投稿を二重にしようとしていません。むしろ私は私の問題をより簡潔な方法で表現できるかどうかを見ています。これまでのところ動作しません]]

+0

はい、私はそれを考えました。このフォームの慣性原型とその他のいくつかのPOSTはPOSTであり、私はその先例から分岐したくありませんでした。多分それは再考する時です。 –

答えて

-1

私はbase64_encode/base64_decodeを使用します。これを試してみてください:

エヴァー代わりにあちこちサーバーとブラウザの間でテキストを移動するので、さらなる処理のため、サーバー上のデータを保持するために sessionsを用いることが考え
<? 
$url = $_SERVER['SCRIPT_NAME']; 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if ($_POST['text']) { 
     if (get_magic_quotes_gpc()) { 
      $text = stripslashes($_POST['text']); 
     } else { 
      $text = $_POST['text']; 
     } 
     $escaped = base64_encode($text); 
     ?> 
     <form action="<?= $url ?>" method="post"> 
     <p>Hidden data: <i><?= $escaped ?></i></p> 
     <input type="hidden" name="encoded" value="<?= $escaped ?>"> 
     <input type="submit" value="Send hidden data"> 
     </form> 
     <? 
    } else if ($_POST['encoded']) { 
     $decoded = base64_decode($_POST['encoded']); 
     ?> 
     <p><?= htmlspecialchars($decoded) ?></p> 
     <p><a href="<?= $url ?>">Try again</a></p> 
     <? 
    } 
} else { 
    ?> 
    <form action="<?= $url ?>" method="post"> 
    <textarea name="text"></textarea> 
    <input type="submit" value="Send source data"> 
    </form> 
    <? 
} 
?> 
0

関連する問題