0

アクセント付きの文字列を保存しようとすると問題が発生します。

私たちのオンライン システムはさまざまな国のクライアントが使用しているため、一部のクライアントはアクセントを使用しています。

このように保存する値を取得するリクエストを行う場合

$value = trim(strip_tags(htmlspecialchars($_REQUEST['value'], ENT_QUOTES, 'UTF-8')));

このようにして値を保存します

Gé

htmlspecialchars の代わりに htmlentities を使用すると、このように保存されます

géî

保存しようとしている正しい文字列は

画面やレポートに正しく表示できるように、これを正しく保存する必要があります。

私たちのデータベースは UTF-16 (MS SQL Server) を使用しており、このようなページで UTF-8 を使用するようにメタ タグを宣言しています。

<meta charset='utf-8'>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>

接続は次のようになります。

$link = sqlsrv_connect($dbserver, array(
    'Database'=>$database,
    'UID' => $uid,
    'PWD' => $pwd,
    'CharacterSet' => 'UTF-8'
));
4

2 に答える 2

1

試行錯誤の末、これが私が見つけた解決策です。

sqlsrv_connect は既定で接続プールを行うため、接続はアプリケーション プールに残ります。

デフォルトでは、sqlsrv_connect() は接続プールを使用して接続パフォーマンスを向上させます。接続プールをオフにする (つまり、呼び出しごとに新しい接続を強制する) には、$connectionOptions 配列の "ConnectionPooling" オプションを 0 (または FALSE) に設定します。詳細については、 » SQLSRV 接続プールを参照してください。

PHPマニュアルから- sqlsrv_connect

私の接続は以前はこのようなものでした

$link = sqlsrv_connect($dbserver, array(
    'Database'=>$database,
    'UID' => $uid,
    'PWD' => $pwd
));

文字セットなし。

文字セットを接続に追加した後でも、このエラーが発生しました。

これが今の私のつながりです。

$link = sqlsrv_connect($dbserver, array(
    'Database'=>$database,
    'UID' => $uid,
    'PWD' => $pwd,
    'CharacterSet' => 'UTF-8'
));

メタタグを使用してブラウザに UTF-8 を使用するように強制した後、db には正しく保存されていましたが、正しく表示されませんでした。これは、UTF-8 に 2 回エンコードしていたためで、表示時に 2 番目のエンコードを削除しました。

このすべての後、IIS リセットを実行してアプリケーション プールをリセットし、次のように処理した後、スクリプトで強制的に接続を閉じました。

// Close the connection.
sqlsrv_close( $linkEventlogic );

正しく動作するようになりました。

于 2013-05-08T15:31:12.870 に答える
-1

あなたのやり方は良さそうです。試してみてください:

$string = "\* this is test string *\";
echo utf8_encode($string);

動作しますか?

于 2013-05-08T09:09:41.537 に答える