我正在使用以下代码从文件中获取输入
$jap= str_replace("\n","",addslashes(strtolower(trim(fgets($fh), " \t\n\r"))));
Run Code Online (Sandbox Code Playgroud)
我以前也曾在故障排除时尝试过这些
$jap= str_replace("\n","",addslashes(strtolower(trim(fgets($fh)))));
$jap= addslashes(strtolower(trim(fgets($fh), " \t\n\r")));
Run Code Online (Sandbox Code Playgroud)
如果我回显$ jap它看起来很好,所以稍后在代码中,没有任何其他改变$ jap它被插入数据库,但是我注意到一个比较测试,检查这个日期是否已经在数据库中返回false当我可以清楚地看到,在数据库中看似完全相同的日本条目.所以我复制了从phpmyadmin插入的jap条目,或者从显示jap的我的网站上插入并粘贴到记事本中,我发现它像这样粘贴...(这是一个完全粘贴到下面的引号)
"
バスにのって,うみへ行きました"
显然我需要,它没有那个白色空间和休息或它是什么.
因此,据我所知,修剪不会按照它所说的那样做.或者我在这里遗漏了什么.如果是这样的话是什么?
更新:关于杰克斯的回答
preg_replace没有帮助,但这是我做的,我使用bin2hex()来确定"不是我想要的部分"的部分是efbbbf我这样做是通过将$ jap带入str替换并删除日语我是期待找到,剩下的东西进入bin2hex.结果就是上面的"efbbbf"
echo bin2hex(str_replace("????????????","",$jap));
Run Code Online (Sandbox Code Playgroud)
上面的输出是efbbbf但它是什么?我可以制作str_replace以某种方式删除它吗?
Ja͢*_*͢ck 26
该trim函数不知道Unicode空格.你可以试试这个:
preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $str);
Run Code Online (Sandbox Code Playgroud)
否则,您可以查看bin2hex()前面添加的字符.
更新
您的文件包含UTF8 BOM; 删除它:
$f = fopen("file.txt", "r");
$s = fread($f, 3);
if ($s !== "\xef\xbb\xbf") {
// bom not found, rewind file
fseek($f, 0, SEEK_SET);
}
// continue reading here
Run Code Online (Sandbox Code Playgroud)