1

2 つのテキストエリアとボタンを使用しています。アイデアは、ボタンが押されたときに textarea1 のすべての情報が php 関数に送信され、それらを逆にして textarea2 に結果を返すことです (私は ajax も使用しているので、Web サイトをリロードする必要はありません)。

問題は、これは適切に機能しますが、特別なシンボルが textarea2 に戻ってきたときに � として表示されるため (すべてではありません)、エンコーディングに問題があると想定しています。

これは、結果を textarea2 に返す単純な php コードです。

<?php
$data = rawurldecode($_GET["data"]);

//mb_internal_encoding("UTF-8");
//mb_http_output( "UTF-8" );
// ob_start("mb_output_handler");

echo strrev($data);
?>

ご覧のとおり、内部エンコーディングをUTF-8に設定しようとしましたが、phpに送信する前にデータをエンコードしてphp関数でデコードしようとしましたが、同じ効果がありました。

4

1 に答える 1

2

strrev()これは、UTF-8 などの可変バイト長エンコーディングにとっては朗報ではありません。UTF-8 で 1 バイトで表現できる文字 (ASCII など) は安全ですが、そうでない文字はマングルされます。

Unicode フラグを有効にして正規表現を使用すると、この制限を回避できますstrrev()

// `u` flag so `.` match Unicode characters and `s` flag so `.` matches `\n`.
preg_match_all('/./us', $str, $matches);
// Reverse the array of matches, and then join the characters back together.
$str = implode(array_reverse($matches[0]));
于 2012-04-17T12:18:59.447 に答える