Utf8编码/特殊字符难题

时间:2015-08-26 14:22:33

标签: php utf-8 special-characters html-entities

我的php从数据库中读取一些产品属性。文本读作utf-8。

出于测试的目的:在解析数据时,我将一些数据输出到完全呈现的浏览器。Notre Protéine de Soja 90 en poudre fournit plus de 90% de protéines de soja par 100g (base sèche) vérifié par les derniers résultats des tests indépendants réalisés sur nos produits.

然后我尝试使用像这样的文件将其写入文件 -

file_put_contents(filename,  utf8_encode($data));

file_put_contents(filename, $data);

$handle = fopen($filename, 'w');
fwrite($handle,utf8_encode($data));
fclose($handle);

$handle = fopen($filename, 'w');
fwrite($handle,$data);
fclose($handle);

出于某种原因,当它将数据写入文件然后我通过文件查看数据时,数据会更改为Notre Protéine de Soja 90 en poudre fournit plus de 90% de protéines de soja par 100g (base sèche) vérifié par les derniers résultats des tests indépendants réalisés sur nos produits.

**主要问题是法国口音发生变化。(元音上方的斜线)**

我认为文件可能是某种不同的格式,因此在命令行中我做了以下操作 -

php > $e = file_get_contents('filename.csv');
php > echo mb_detect_encoding($e);
UTF-8
php > $e = file_get_contents('filename.csv');
php > echo mb_detect_encoding($e);
UTF-8
php >

因此该文件是utf-8编码,也是我在浏览器上输出文本时的文本。这是否意味着对文本的更改不是编码问题?如果不是它是什么?

2 个答案:

答案 0 :(得分:3)

看起来数据是实体编码的,这意味着翻译了具有等效HTML实体的任何特殊字符。这是为了在网页上正确显示字符。

我的猜测是,你从数据库收到的字符串是故意在数据库中进行实体编码的,当你显示它们时,它们就会显示出来(因为浏览器对实体进行解码),但是在文本文件中你可以看到实体。

我想说这里没问题!但是如果你想要一个无实体的字符串,你可以通过html_entity_decode()运行它。

编辑:deceze的回答更好地解释了这一点!

答案 1 :(得分:2)

é是一个 HTML实体,意味着文本中的“特殊”字符是HTML编码的。这与UTF-8或utf8_encodefile_put_contents无关;这些函数都不会 HTML-encode 一个字符串。

数据库中的原始数据很可能是HTML编码的,在将内容放入文件之前您没有注意到这一点,因为将HTML实体输出到浏览器会将这些实体呈现为它们所代表的常规字符。 / p>