Php 上载和清理*.txt文件删除过多空间

Php 上载和清理*.txt文件删除过多空间,php,Php,当我上传一个带有php上传脚本的文本文件(*.txt)并将其发送到DB时,有很多不需要的字符,它们不会显示在屏幕上,而是显示为� 在数据库中(在每个普通字符之后) 这是我正在上传的文本: File test_02 Date 15. Juni 2018 Start of Meas. 11:09 Tester Probe/Test Force Sono50/50N Probe-SN

当我上传一个带有php上传脚本的文本文件(*.txt)并将其发送到DB时,有很多不需要的字符,它们不会显示在屏幕上,而是显示为� 在数据库中(在每个普通字符之后)

这是我正在上传的文本:

File                test_02
Date                15. Juni 2018
Start of Meas.      11:09
Tester              
Probe/Test Force    Sono50/50N
Probe-SN            777
Dwell Time          0 sec
Material table      Steel   A1
Norm; HV            EN ISO 18265
Adjustment File     Unnamed
Adj. Number         0
Limits              Off
Number              4
Mean                773,0   HV
Std. Deviation      9,5 HV  1,2%
Maximum             785,0   HV
Minimum             763,8   HV
R                   21,2    HV  2,7%
Cp
Cpk

1           763,8   HV
2           785,0   HV
3           775,8   HV
4           767,1   HV
所以我写了一些代码来清理它,但是我现在缺少了一些关键的空间。哪里出错,如何纠正

$lines = file($_FILES['uploaded']['tmp_name']); //file in to an array
print\r

数组([0]=>��文件测试_02=>日期15.Juni 2018[2]=>开始 测量值11:09[3]=>测试仪[4]=>探头/测试力Sono50/50N[5]=> 探头SN 777[6]=>停留时间0秒[7]=>材料表A1 [8] =>标准;HV EN ISO 18265[9]=>未命名的调整文件[10]=> 数字0[11]=>限制[12]=>数字4[13]=>平均值 773,0 HV[14]=>标准偏差9,5 HV 1,2%[15]=>最大785,0 HV [16] =>最小763,8 HV[17]=>R 21,2 HV 2,7%[18]=>Cp[19]=>Cpk [20] =>[21]=>1763,8高压[22]=>2785,0高压[23]=>3775,8高压[24] =>4767,1高压[25]=>1

这是我的技巧,将所有不需要的字符更改为下划线,然后用一个空格替换所有下划线

<?php
// convert spaces to underscore
$lines_01 = str_replace(' ', '_', $lines[01]);
$lines_02 = str_replace(' ', '_', $lines[02]);
$lines_04 = str_replace(' ', '_', $lines[04]);
$lines_05 = str_replace(' ', '_', $lines[05]);
$lines_06 = str_replace(' ', '_', $lines[06]);
$lines_07 = str_replace(' ', '_', $lines[07]);
$lines_08 = str_replace(' ', '_', $lines[08]);
$lines_14 = str_replace(' ', '_', $lines[14]);
$lines_17 = str_replace(' ', '_', $lines[17]);
$lines_21 = str_replace(' ', '_', $lines[21]);
$lines_22 = str_replace(' ', '_', $lines[22]);
$lines_23 = str_replace(' ', '_', $lines[23]);
$lines_24 = str_replace(' ', '_', $lines[24]);

// remove unwanted text and keep normal charcaters
$lines_01 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_01);
$lines_02 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_02);
$lines_04 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_04);
$lines_05 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_05);
$lines_06 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_06);
$lines_07 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_07);
$lines_08 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_08);
$lines_14 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_14);
$lines_17 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_17);
$lines_21 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_21);
$lines_22 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_22);
$lines_23 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_23);
$lines_24 = preg_replace('/[^A-Za-z0-9\,.:_]/', '', $lines_24);

// convert one or multipe underscore to spaces
$lines_01 = preg_replace('/_+/', ' ', $lines_01);
$lines_02 = preg_replace('/_+/', ' ', $lines_02);
$lines_04 = preg_replace('/_+/', ' ', $lines_04);
$lines_05 = preg_replace('/_+/', ' ', $lines_05);
$lines_06 = preg_replace('/_+/', ' ', $lines_06);
$lines_07 = preg_replace('/_+/', ' ', $lines_07);
$lines_08 = preg_replace('/_+/', ' ', $lines_08);
$lines_14 = preg_replace('/_+/', ' ', $lines_14);
$lines_17 = preg_replace('/_+/', ' ', $lines_17);
$lines_21 = preg_replace('/_+/', ' ', $lines_21);
$lines_22 = preg_replace('/_+/', ' ', $lines_22);
$lines_23 = preg_replace('/_+/', ' ', $lines_23);
$lines_24 = preg_replace('/_+/', ' ', $lines_24);

// remove unwanted text
$lines_01 = str_replace('Date ', '', $lines_01);
$lines_02 = str_replace('Start of Meas. ', '', $lines_02);
$lines_04 = str_replace('ProbeTest Force ', '', $lines_04);
$lines_05 = str_replace('ProbeSN ', '', $lines_05);
$lines_06 = str_replace('Dwell Time ', '', $lines_06);
$lines_07 = str_replace('Material table ', '', $lines_07);
$lines_08 = str_replace('Norm HV', '', $lines_08);
$lines_14 = str_replace('Std. Deviation ', '', $lines_14);
$lines_17 = str_replace('R ', '', $lines_17);
$lines_21 = str_replace('1 ', '', $lines_21);
$lines_22 = str_replace('2 ', '', $lines_22);
$lines_23 = str_replace('3 ', '', $lines_23);
$lines_24 = str_replace('4 ', '', $lines_24);
?>

左边是发送给数据库的,右边是我想要的。请指教

看起来您的文本文件在最开始的两个字节中有一个BOM()

使用
xxd
实用程序(在Unix/Linux甚至Cygwin上提供。也可以在线提供)诊断这种可能性

例如:

xxd-l2

如果文件以字节顺序标记,将显示fffe

该实用程序还可以帮助您确定文件中还有哪些其他“垃圾”字符。在这种情况下,只需在此处使用
xxd您的文件
,查看您可能遗漏了什么

通常,它可能会引发这些问号,表明某些UTF-8编码字符未解析


通过编程,您可能希望以二进制模式打开文件,并在读取文件时向前移动2个字节,或者在处理文件之前,使用专业级别编辑器修改和修剪这些字节。例如,使用Ultra Edit,并切换到十六进制模式(Ctrl+H)。

是否对txt文件和php脚本的utf-8进行编码而不使用BOM?数据库怎么样?数据库连接呢

如果只执行一次或两次,则转到要插入字符的字符串的substr(),否则应修改字符编码。

阅读一些编辑器在保存文件时会自动添加BOM表。如果这是一个问题,应该有一个选项来禁用它。有时在“另存为”对话框中,有时在“设置”对话框中。谢谢您的详细解释。