我的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编码,也是我在浏览器上输出文本时的文本。这是否意味着对文本的更改不是编码问题?如果不是它是什么?
答案 0 :(得分:3)
看起来数据是实体编码的,这意味着翻译了具有等效HTML实体的任何特殊字符。这是为了在网页上正确显示字符。
我的猜测是,你从数据库收到的字符串是故意在数据库中进行实体编码的,当你显示它们时,它们就会显示出来(因为浏览器对实体进行解码),但是在文本文件中你可以看到实体。
我想说这里没问题!但是如果你想要一个无实体的字符串,你可以通过html_entity_decode()运行它。
编辑:deceze的回答更好地解释了这一点!
答案 1 :(得分:2)
é
是一个 HTML实体,意味着文本中的“特殊”字符是HTML编码的。这与UTF-8或utf8_encode
或file_put_contents
无关;这些函数都不会 HTML-encode 一个字符串。
数据库中的原始数据很可能是HTML编码的,在将内容放入文件之前您没有注意到这一点,因为将HTML实体输出到浏览器会将这些实体呈现为它们所代表的常规字符。 / p>