我正在从各种RSS源中读出大量文本并将它们插入到我的数据库中.
当然,在馈送中使用了几种不同的字符编码,例如UTF-8和ISO-8859-1.
不幸的是,有时文本的编码存在问题.例:
"Fußball"中的"ß"应该在我的数据库中看起来像这样:"Ÿ".如果是"Ÿ",则会正确显示.
有时,"Fußball"中的"ß"在我的数据库中看起来像这样:"ß".当然,它显示错误.
在其他情况下,"ß"保存为"ß" - 所以没有任何改变.然后它也显示错误.
我该怎么做才能避免案例2和3?
如何使所有内容编码相同,最好是UTF-8?我utf8_encode()什么时候必须使用,什么时候必须使用utf8_decode()(很清楚效果是什么,但什么时候必须使用这些功能?)什么时候我必须对输入什么都不做?
你能帮助我并告诉我如何使一切编码相同吗?也许有功能mb_detect_encoding()?我能为此写一个函数吗?所以我的问题是:
像这样的功能会起作用吗?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
Run Code Online (Sandbox Code Playgroud)
我已经测试了它,但它不起作用.它出什么问题了?
我有一个应用程序来处理来自世界各地的客户,当然,我希望进入我的数据库的所有内容都是UTF-8编码的.
对我来说主要的问题是我不知道任何字符串的来源是什么编码 - 它可以来自文本框(使用<form accept-charset="utf-8">仅在用户实际提交表单时才有用),或者它可能是从上传的文本文件,所以我真的无法控制输入.
我需要的是一个函数或类,它确保进入我的数据库的内容尽可能采用UTF-8编码.我已经尝试iconv(mb_detect_encoding($text), "UTF-8", $text);
但是有问题(如果输入是'fiancée'它返回'fianc').我尝试了很多东西= /
对于文件上传,我喜欢要求最终用户指定他们使用的编码,并向他们展示输出结果的预览,但这对于讨厌讨厌的黑客没有帮助(事实上,它可以使他们的生活更容易一点).
我已经阅读了关于这个主题的其他SO问题,但它们似乎都有微妙的差异,例如"我需要解析RSS提要"或"我从网站上搜集数据"(或者,实际上,"你不能").
但必须有一些东西至少有一个好的尝试!
我有一个脚本,它将多个文件合并为一个,当其中一个文件具有UTF8编码时,它会中断.我认为我应该utf8_decode()在读取文件时使用该函数,但我不知道如何判断哪个需要解码.
我的代码基本上是:
$output = '';
foreach ($files as $filename) {
$output .= file_get_contents($filename) . "\n";
}
file_put_contents('combined.txt', $output);
Run Code Online (Sandbox Code Playgroud)
目前,在UTF8文件的开头,它在输出中添加了这些字符: