Почему php trim не действительно удаляет все пробелы и разрывы строк?
Я захватываю ввод из файла со следующим кодом
$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 уже в DB false, когда я могу ясно видеть, что, казалось бы, точно такая же запись jap находится в БД. Поэтому я копирую запись jap, которая была вставлена прямо из phpmyadmin или с моего сайта, где отображается jap и вставляется в блокнот. Я замечаю, что он вставляется так... (это точная паста в приведенных ниже цитатах)
"
バ ス に の っ て, う み へ 行 き ま し た "
и, очевидно, мне нужно, это без этого пробела и разрывов или что бы это ни было.
насколько я могу сказать, что обрезка не делает то, что говорит, что это будет делать. или им что-то не хватает. если да, то что это?
UPDATE:
в ответ на ответ Jacks
preg_replace не помогло, но вот что я сделал, я использовал
bin2hex(), чтобы определить, что часть, которая "не является частью, которую я хочу",
efbbbf
Я сделал это, взяв $jap в str replace и удалив japanese, которого я ожидаю найти, и что осталось в bin2hex. и результатом был вышеупомянутый "efbbbf"
echo bin2hex(str_replace("どちらがあなたの本ですか","",$jap));
вывод выше был efbbbf
но что это? могу ли я сделать str_replace, чтобы удалить это как-то?
Ответы
Ответ 1
Функция trim
не знает о белых пробелах в Юникоде. Вы можете попробовать следующее:
preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $str);
Как взято из: Обрезать пробелы Unicode в PHP 5.2
В противном случае вы можете сделать bin2hex()
, чтобы узнать, какие символы добавляются спереди.
Обновление
В вашем файле содержится спецификация UTF8; для его удаления:
$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