2012-06-02 66 views
10

Tôi lấy đầu vào từ một tập tin với đoạn mã sautại sao cắt php không thực sự xoá tất cả khoảng trắng và ngắt dòng?

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

tôi cũng đã từng thử các trong khi xử lý sự cố

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

và nếu tôi echo $ Jap có vẻ tốt đẹp, vì vậy sau này trong mã , mà không có bất kỳ thay đổi nào khác đối với $ jap, nó được chèn vào DB, tuy nhiên tôi nhận thấy một kiểm tra so sánh kiểm tra xem jap này đã có trong DB trả về false khi tôi có thể thấy rõ ràng rằng một mục nhập giống hệt nhau của jap có trong DB hay không . Vì vậy, tôi sao chép mục nhập jap được chèn ngay từ phpmyadmin hoặc từ trang web của tôi nơi jap được hiển thị và dán vào một notepad tôi nhận thấy rằng nó dán như thế này ... (đây là một dán chính xác vào các dấu ngoặc kép dưới đây)

"

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

và rõ ràng tôi cần, nó mà không có khoảng trắng và phá vỡ hoặc bất cứ điều gì nó được.

vì vậy, theo như tôi có thể nói cắt không làm những gì nó nói nó sẽ làm. hoặc im thiếu một cái gì đó ở đây. Nếu vậy, nó là cái gì?

UPDATE: liên quan đến Jacks câu trả lời

các preg_replace không giúp đỡ, nhưng đây là những gì tôi đã làm, tôi sử dụng BIN2HEX() để xác định rằng phần đó "không phải là một phần tôi muốn" là efbbbf tôi đã làm điều này bằng cách lấy $ jap vào str thay thế và loại bỏ tiếng Nhật tôi đang mong đợi để tìm, và những gì còn lại đi vào bin2hex. và kết quả là "efbbbf" ở trên

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

ra những điều trên là efbbbf nhưng nó là gì? tôi có thể làm cho một str_replace để loại bỏ điều này bằng cách nào đó?

+2

'Additionallashes' là gì? Và xin vui lòng không nói nó cho cơ sở dữ liệu. – mario

+1

Bạn đã thử chỉ 'cắt ($ str)', không có tham số thứ hai? Theo [hướng dẫn] (http://php.net/trim), phiên bản của bạn sẽ không xóa các byte NUL và các tab dọc (bất kể "tab dọc" là ...) – bfavaretto

+1

có thể trùng lặp của [Cắt khoảng trắng unicode trong PHP 5.2] (http://stackoverflow.com/questions/4166896/trim-unicode-whitespace-in-php-5-2) – mario

Trả lời

14

Chức năng trim không biết về khoảng trắng Unicode. Bạn có thể thử này:

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

Như lấy từ: Trim unicode whitespace in PHP 5.2

Nếu không, bạn có thể làm một bin2hex() để tìm ra những nhân vật đang được thêm vào ở phía trước.

Cập nhật

Tệp của bạn chứa một BOM UTF8; để xóa hình ảnh:

$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 
+0

preg_replace không giúp ích gì nhưng tôi đã sử dụng bin2hex() để xác định rằng phần "không phải là phần tôi muốn" là efbbbf tôi đã làm điều này bằng cách lấy $ jap vào str thay thế và xóa Nhật Bản tôi đang mong đợi để tìm, và những gì còn lại đi vào bin2hex. và kết quả là ở trên "efbbbf" echo bin2hex (str_replace ("ど ち ら が あ あ か か か",, $ jap)); – user1397417

+0

@ user1397417 nghĩ rằng tôi đã tìm thấy nó. tệp của bạn chứa tiêu đề BOM UTF8. Đã cập nhật câu trả lời của tôi. –

+0

Giải pháp cập nhật của bạn có vẻ như đã giải quyết được vấn đề của tôi, cảm ơn! Tôi đã nhấp vào "câu trả lời này hữu ích" cho bạn nhưng nó nói nó đòi hỏi "15 danh tiếng" xin lỗi – user1397417

Các vấn đề liên quan