sui*_*eek 9 php mysql character
提供的答案都很棒,我在Alnitak的回答中提到我需要查看我的CSV生成脚本,因为无论出于什么原因它都没有输出UTF-8.
正如正确指出的那样,它输出了UTF-8 - Ye Olde Microsoft Excel存在的问题并没有像我希望的那样获取编码.
我现有的CSV代看起来像:
// Create file and exit;
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
echo $csv_output;
Run Code Online (Sandbox Code Playgroud)
它现在看起来像:
// Create file and exit;
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: text/csv; charset=ISO-8859-1");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");
echo iconv('UTF-8', 'ISO-8859-1', $csv_output);
Run Code Online (Sandbox Code Playgroud)
原始问题
嗨,
我有一个收集数据的表单,表单工作正常,但我注意到如果有人键入或使用'£'符号,MySQL DB最终会得到'£'.
不确定在何处或如何阻止这种情况发生,代码和数据库信息要遵循:
MySQL细节
mysql> SHOW COLUMNS FROM fraud_report;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | mediumint(9) | | PRI | NULL | auto_increment |
| crm_number | varchar(32) | YES | | NULL | |
| datacash_ref | varchar(32) | YES | | NULL | |
| amount | varchar(32) | YES | | NULL | |
| sales_date | varchar(32) | YES | | NULL | |
| domain | varchar(32) | YES | | NULL | |
| date_added | datetime | YES | | NULL | |
| agent_added | varchar(32) | YES | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
8 rows in set (0.03 sec)
Run Code Online (Sandbox Code Playgroud)
PHP函数
function processFraudForm($crm_number, $datacash_ref, $amount, $sales_date, $domain, $agent_added) {
// Insert Data to DB
$sql = "INSERT INTO fraud_report (id, crm_number, datacash_ref, amount, sales_date, domain, date_added, agent_added) VALUES (NULL, '$crm_number', '$datacash_ref', '$amount', '$sales_date', '$domain', NOW(), '$agent_added')";
$result = mysql_query($sql) or die (mysql_error());
if ($result) {
$outcome = "<div id=\"success\">Emails sent and database updated.</div>";
} else {
$outcome = "<div id=\"error\">Something went wrong!</div>";
}
return $outcome;
}
Run Code Online (Sandbox Code Playgroud)
示例DB输入
+----+------------+--------------+---------+------------+--------------------+---------------------+------------------+
| id | crm_number | datacash_ref | amount | sales_date | domain | date_added | agent_added |
+----+------------+--------------+---------+------------+--------------------+---------------------+------------------+
| 13 | 100xxxxxxx | 10000000 | £10.93 | 18/12/08 | blargh.com | 2008-12-22 10:53:53 | agent.name |
Run Code Online (Sandbox Code Playgroud)
在PHP中,另一个小规模的解决方案是在返回的utf8字符串上进行字符串转换:
print iconv('UTF-8', 'ASCII//TRANSLIT', "Mystring â"); //"Mystring "
Run Code Online (Sandbox Code Playgroud)
或者在其他平台上激活系统调用inconv命令(linux/osx)
http://php.net/manual/en/function.iconv.php#83238
归档时间: |
|
查看次数: |
24049 次 |
最近记录: |