0

私は次のことをしました:

  1. データを含むスプレッドシートがあります。行の 1 つに ü 文字が含まれています。
  2. これを CSV ファイルとして OpenOffice.org に保存します。文字エンコーディングを尋ねられたら、UTF-8 を選択します。
  3. Navicat を使用して MySQL データベース テーブル、InnoDB を UTF-8 utf8_general エンコーディングで作成し、CSV をインポートします。
  4. 特別なü文字を含む文字列htmlspecialchars($string, ENT_COMPAT, 'UTF-8')であるPHP関数を使用しようとしました。$string

エラーが表示されます: Invalid multibyte sequence in argument。で変更'UTF-8'すると'ISO8859-1'、エラーは発生しませんが、間違った文字が表示されます。(「未知の文字」文字は、のように見えます<?>)

HTML フォームを使用してデータベースの文字列を更新すると、エラーが消えて文字が正しく表示されますが、Navicat でレコードを見ると、2 つの文字のように見えます。

[1/4][A with some thing on top of it]

1文字とは見なされないマルチバイト。

何が起こっているのか、どこで問題が発生しているのか、それに対して何ができるのか?

4

1 に答える 1

2

「無効なマルチバイト」エラーがどこから来たのかはわかりませんが、あなたの原因htmlspecialchars()ではないと確信しています:

この関数の目的では、文字セット ISO-8859-1、ISO-8859-15、UTF-8、cp866、cp1251、cp1252、および KOI8-R は事実上同等です。これらすべての文字セットの位置。

私の理解でhtmlspecialchars()は、文字セットを指定せずに UTF-8 文字列に対して正常に動作するはずです。おそらく、フォームを含む HTML ページか、使用するデータベース接続が UTF-8 でエンコードされていないでしょう。後者については、

SET NAMES utf8;

挿入を行う前に mySQL に。

于 2010-11-21T13:08:39.933 に答える