0

私は2本の弦を持っています"CHILDREN’S"

そのうちの 1 つは MySQL データベースに保存されます (実際には、WordPress のページ タイトルです)。もう 1 つは、データベースから文字列をコピーして貼り付けたものです。

var_dump2 つの文字列 ( ) で実行するvar_dump("CHILDREN’S"); var_dump($string)と、コピーして貼り付けたものがstring(12) "CHILDREN’S"で、データベースから表示されたものが ですstring(16) "CHILDREN’S"。これはUTF-8の問題だと思います。

同一の文字列が実際には同一ではない理由について、誰かが光を当てることができますか?

4

4 に答える 4

1

「CHILDREN'S」は10文字です。12にするには、「'」がUTF-8コードポイントになる必要があります。これで問題ありません。

しかし、2番目の引用が実際に。でない限り、16文字を取得する方法はわかりません’。HTMLエンティティを除いて、私が知っている7バイトのエンコーディングはありません。

もしそうなら、html_entity_decodeあなたの友達かもしれません。

于 2012-09-13T12:11:35.097 に答える
0
于 2012-09-13T12:15:33.660 に答える
0

これはエンコーディングの問題である可能性があります。その場合、データベース列のエンコーディングをチェックして、期待どおりであることを確認する必要があります。

または、データベース文字列に印刷できない文字がいくつか含まれている可能性があります。データベースツールからある種の厄介な文字をコピーして貼り付けた可能性があります。

于 2012-09-13T12:10:50.900 に答える
0

文字列が実際にどのように異なるかを確認するには、すべての文字列から 16 進数を書き出すことができます。

例えば:

$s1 = 'CHILDREN\'S';

for($i=0; $i<strlen($s1); $i++)
  echo '0x' . bin2hex(substr($s1, $i, 1)) . ' ';

これは0x43 0x48 0x49 0x4c 0x44 0x52 0x45 0x4e 0x27 0x53結果として与えます。データベースの文字列で同じことを試して、どこが違うかを確認してください。

于 2012-09-13T12:16:36.627 に答える