13

我正在使用以下代码从文件中获取输入

$jap= str_replace("\n","",addslashes(strtolower(trim(fgets($fh), " \t\n\r"))));

我以前在故障排除时也尝试过这些

$jap= str_replace("\n","",addslashes(strtolower(trim(fgets($fh)))));
$jap= addslashes(strtolower(trim(fgets($fh), " \t\n\r")));

如果我回显 $jap 它看起来不错,所以稍后在代码中,没有对 $jap 进行任何其他更改,它被插入到数据库中,但是我注意到一个比较测试检查这个日本人是否已经在数据库中,当我返回 false可以清楚地看到数据库中有一个看似完全相同的 jap 条目。因此,我复制了从 phpmyadmin 或显示 jap 的站点直接插入的 jap 条目,然后粘贴到记事本中,我注意到它像这样粘贴...(这是精确粘贴到下面的引号中)

"

バスにのって、うみへ行きました"

显然我需要,它没有那个空白和中断或任何它。

据我所知,修剪并没有按照它所说的那样做。或者我在这里遗漏了一些东西。如果是这样,那是什么?

更新:关于杰克的回答

preg_replace 没有帮助,但这就是我所做的,我使用 bin2hex() 来确定“不是我想要的部分”的部分是 efbbbf 我通过将 $jap 放入 str replace 并删除我的日语来做到这一点期待找到,剩下的进入 bin2hex。结果是上面的“efbbbf”

echo bin2hex(str_replace("どちらがあなたの本ですか","",$jap));

上面的输出是 efbbbf 但它是什么?我可以做一个 str_replace 以某种方式删除它吗?

4

1 回答 1

36

trim函数不知道 Unicode 空格。你可以试试这个:

preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $str);

摘自:Trim unicode whitespace in PHP 5.2

否则,您可以执行 abin2hex()来找出在前面添加了哪些字符。

更新

您的文件包含 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
于 2012-06-02T01:48:32.787 回答