我正在尝试从表中提取数据并将其作为文本(RTF)文件输出。问题是内容中有一些字符被破坏了。例如,如果我有西班牙语内容,则某些字符无法识别并被更改。例如,如果我有:
'implementación'
这个词改为:
'implementación'
通过使用断点,我可以看到来自数据库的字符串是正确的,只有当它被打印出来时才会改变代字号。以下是我的代码:
header("Content-Type: application/rtf; charset=utf-8;");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=".$fileName .".rtf");
header("Content-Transfer-Encoding: binary");
echo $content;
感谢您的帮助。
杰森
答案 0 :(得分:1)
将输出字符集与表格的字符集进行匹配,或将表格中的字符集转换为您要输出的字符集。
假设该表使用US-ASCII存储数据,我们希望将其输出为UTF-8。
$content = iconv( 'US-ASCII', 'UTF-8//IGNORE//TRANSLIT', $content );
echo $content;
这会将某些字符EG:€音译为EUR,并忽略/删除输出字符集未知的字符。
如果您在表中使用Latin-1-General编码,请尝试使用CP850(AKA:代码页850,MSDOS Latin-1)而不是US-ASCII。
http://us2.php.net/manual/en/function.iconv.php
您可以选择将查询中的编码转换为表格 例如使用mysql
SELECT convert(cast(convert(content using latin1) as binary) using utf8) AS content
MySQL - Convert latin1 characters on a UTF8 table into UTF8
如果发送到数据库的数据使用的是与表不同的字符集,则此功能非常有用。例如,使用UTF-8校对将ASCII或ISO-8859-1数据发送到表/列。
要查找表格字符编码,请尝试:
SHOW CREATE TABLE `tablename`;
或How do I see what character set a MySQL database / table / column is?
对于表格编码:
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
AND T.table_schema = "schemaname"
AND T.table_name = "tablename";
对于列编码:
SELECT character_set_name FROM information_schema.`COLUMNS` C
WHERE table_schema = "schemaname"
AND table_name = "tablename"
AND column_name = "columnname";
或者,您可以尝试更改PHP中的charset标头以匹配数据库表的输出。
header("Content-Type: application/rtf; charset=ISO-8859-1;");
答案 1 :(得分:0)