php - 为什么 php trim 没有真正删除所有空格和换行符?

标签 php

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

$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 进行任何其他更改,它被插入到数据库中,但是我注意到一个比较测试检查这个 jap 是否已经在返回的数据库中当我可以清楚地看到数据库中有一个看似完全相同的 jap 条目时为 false。所以我复制了直接从 phpmyadmin 或从我的显示 jap 的站点插入的 jap 条目并粘贴到记事本中我注意到它像这样粘贴......(这是对下面引号的精确粘贴)

バスニのっテ、うみへ行きました"

显然我需要,它没有空白和中断或其他任何东西。

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

更新: 关于 jack 的回答

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

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

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

最佳答案

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

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

取自:Trim unicode whitespace in PHP 5.2

否则,您可以执行 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

关于php - 为什么 php trim 没有真正删除所有空格和换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10859098/

相关文章:

php - 如何使用 32 位机器在 PHP 中打印 40 位数字

php - 如何使用 Bootstrap 在 CakePHP 模板文件(default.ctp)上显示图像

php - 为什么 PHP 特征不能有静态抽象方法?

php - Symfony2 : There is no extension able to load the configuration for

PHP - MYSQL 未在搜索查询中选择

php - Apache + socketIO 失败

php - 我怎样才能 "unset"一个已经声明的类

php - 有人可以帮助我解决此错误消息吗?我无法弄清楚

php - 将 Laravel $validation->messages() 转换为对象数组的优雅代码

php - Multi-Tenancy 和多域 Laravel-5