【发布时间】:2015-10-06 20:17:47
【问题描述】:
使用 PHP 对 *.txt 文件执行file_get_contents。然后将数据插入 MySQL。值正在插入 null。 null 是由不间断空格和 excel 导出中的替换字符引起的。我想通过将文本文件中的字符复制到 unicode inspector 中来实现这一点。
对替换字符做了同样的事情。复制文字并粘贴here确认。
尝试了很多 str_replace 和 preg_replace 但没有运气。在这个SO 问题上尝试了几乎所有方法,发现这很有效。
$some_text_with_non_breaking_spaces = "Christ O'Connory";
$clean_text = hex2bin(str_replace('c2a0', '20', bin2hex($some_text_with_non_breaking_spaces)));
echo $clean_text;
但是当我将它与file_get_contents() 方法内联时它没有。
知道如何使用preg_replace、str_replace 或其他方法解析空值吗?
这是我尝试过的所有版本:
$name = str_replace('\A0\00', ' ', $nbsp);
$name = str_replace('c2a0', '20', $nbsp);
$name = str_replace('\xc2\xa0', ' ', $nbsp);
$name = str_replace('~\xc2\xa0~', ' ', $nbsp);
$name = str_replace('\xC2\xA0', ' ',$nbsp);
$name = str_replace(' ', ' ',$nbsp);
$name = hex2bin(str_replace('c2a0', '20', bin2hex($nbsp))); // this did work but not when putting inline with original code.
$name = preg_replace('#[A-Za-z\,\.\'\-\_]#', ' ', $nbsp);
$name = preg_replace('\x{00a0}', ' ', $nbsp);
$name = preg_replace('~\x00\xa0~', ' ', $nbsp);
$name = preg_replace('~\xc2\xa0~', ' ', $nbsp);
$name = preg_replace('\s\s+', ' ', $nbsp);
$name = preg_replace('/\s+/', ' ', $nbsp);
$name = preg_replace('~\x{c2a0}~siu', ' ', $nbsp);
$name = preg_replace('/\s/u', ' ', $nbsp);
$name = preg_replace('/[^\w\d\p{L}]/u', ' ',$nbsp);
这是我试图对其执行 file_get_contents 的文件的 sn-p 数据。
SupervisorGivenName SupervisorSurName row_date logid item_name acdcalls AHT AvgHoldTime transferred CntOBCalls calls
Ders Schmid 09/02/2015 5054589 Christ O'Connory 26 420 112 4 0 0
Nic Flemg 09/02/2015 5054596 Mica Wit 28 543 32 6 0 0
Insert statement:
$bb_query = "INSERT INTO `tier1_bb_agent_daily` (`date`,`loginID`,`empID`,`firstname`,`lastname`,`supID`, `supName`,`acd_calls`,`paetec_acd_calls`,`aht`,`avg_hold_time`,`transferred`,`outbound_call_count`)
VALUES ('{$row['date']}','{$row['loginID']}','{$empID}','{$firstname}','{$lastname}','{$supid}','{$newSupName}',{$row['acd_calls']},{$row['paetec_acd_calls']},{$row['aht']},{$row['avg_hold_time']},{$row['transferred']},{$row['outbound_call_count']})
ON DUPLICATE KEY UPDATE firstname = '{$firstname}', lastname = '{$lastname}',empID = '{$empID}', supID = '{$supid}', supName = '{$newSupName}',acd_calls = {$row['acd_calls']}, aht = {$row['aht']}, paetec_acd_calls = {$row['paetec_acd_calls']}, avg_hold_time = {$row['avg_hold_time']}, transferred = {$row['transferred']}, outbound_call_count = {$row['outbound_call_count']}";
$db->query($bb_query);
【问题讨论】:
-
和
$nbsp定义为?加文件内容是? -
@Fred-ii- 这是一个不间断的空间
-
@MattJamison 您链接的问题有一个使用
~\x{00a0}~siu的答案,而在您的版本中您没有添加修饰符。使用 unicode 时,使用u修饰符至关重要。 -
@HamZa 也没有用。
-
您正在使用 $nbsp 和 $name (两个变量);如果要在字符串中替换它,则必须使用相同的变量名进行下一次替换。希望有帮助。 @OP:是否在 file_get_contents 之后和将其插入 DB 之前检查打印结果?
标签: php mysql regex excel unicode