12

これは私のPHPコードです:

<?php
$result = '';
$str = 'Тугайный соловей';
for ($y=0; $y < strlen($str); $y++) {
    $tmp = mb_substr($str, $y, 1);
    $result = $result . $tmp;
}
echo 'result = ' . $result;

出力は次のとおりです。

Тугайный Ñоловей

私に何ができる?$resultMySQL データベースに入れる必要があります。

4

7 に答える 7

16

あなたのファイルのエンコーディングは何ですか?それもUTF8である必要があります。httpサーバーのデフォルトの文字セットは何ですか?UTF-8でもあるはずです。

エンコーディングは、次の場合にのみ機能します。

  • ファイルは正しくエンコードされています
  • サーバーは、配信されたファイルのエンコーディングを通知します。

データベースを操作するときは、DBフィールドに適切なエンコーディングを設定し、MySQLクライアントがサーバーと通信する方法も設定する必要があります(を参照mysql_set_charset())。MySQLクライアント(この場合はPHP)はデフォルトでISOに設定され、データを再解釈する可能性があるため、フィールドだけでは不十分です。したがって、UTF8DB->ISOクライアント->UTF8PHPスクリプトに挿入されます。なぜそれが最後に台無しになっているのも不思議ではありません:-)

適切な文字セットでファイルを提供する方法は?

header('Content-type: text/html; charset=utf-8')1つの解決策です

を含む.htaccessファイルAddDefaultCharset UTF-8は別のものです

HTMLメタコンテンツタイプも機能する可能性がありますが、HTTPヘッダーを使用してこの情報を送信することをお勧めします。

PS:UTF8では文字列が実際の長さよりも多く報告する可能性がmb_strlen()あるため、使用する必要もあります。strlen()

于 2011-04-20T16:11:07.177 に答える
4

さまざまなデータを送信する予定で、phpヘッダーを使用してutf-8を指定したくない場合は、次のhtmlをページに追加できます。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
于 2011-04-20T16:34:39.593 に答える
3

ロシア語なので、コードはwindows-1251エンコードされていると思います:)文字列をutf-8に変換します:

$str = iconv('windows-1251', 'utf-8', $str);
于 2011-04-20T16:11:55.533 に答える
2

データベースがUTF-8の場合、mysqlは問題ありません。

エコーについては、Webサイトで行う場合は、これをトップページに配置します。

header('Content-Type: text/html; charset=UTF-8');
于 2011-04-20T16:11:17.593 に答える
2

サーバーとの接続の後、最初に次の行を追加するだけです。

mysqli_set_charset($conn,"utf8");
于 2020-01-07T19:46:58.863 に答える
0

HTMLヘッダーなどを使用せずにPHPエコーを使用しているだけの場合、これは私にとってはうまくいきました。

$connect = mysqli_connect($host_name, $user_name, $password, $database);
mysqli_set_charset($connect,"utf8");
于 2020-03-11T14:33:20.270 に答える