2011-08-16 50 views
6

Hoàn toàn đơn giản: utf8_encode ($ string) thay thế các khoảng trắng thông thường bằng dấu cách ("\ u00a0"). Tôi đã thử lọc kết quả bằng str_replace:PHP utf8_encode() chuyển đổi khoảng trống thành các khoảng trống không phá vỡ

str_replace("\u00a0", " ", utf8_encode($string)) 

Nhưng điều đó không khắc phục được.

EDIT: Sigh, tôi là đồ ngốc. Nó cũng không phải là vấn đề với utf8_encode(). Tôi nghĩ rằng tôi đã sử dụng chức năng đó, quên tôi vô hiệu hóa nó trong mã của tôi. Dữ liệu của tôi đang được chạy qua json_encode() cho một yêu cầu AJAX. Đây có phải là vấn đề với json_encode() không? Tôi lo lắng tôi có thể có tội lạm dụng Stack Overflow. Tôi sẽ thử Googling nó.

EDIT cuối cùng: Sự cố xảy ra với chính dữ liệu được sao chép từ tài liệu Word vào bảng MySQL. Tất cả các không gian được sao chép như không gian không phá vỡ. Xin lỗi vì đã lãng phí thời gian của mọi người.

+0

Câu hỏi đặt ra này hạnh phúc, làm thế nào tôi có thể nhận được không gian thường xuyên của tôi trở lại? –

+0

Nếu chuỗi được mã hóa UTF-8, bạn phải thay thế chuỗi đơn vị mã tương ứng thay vì giá trị của giá trị mã. –

+0

Đầu vào của bạn là gì? 0xA0 là không gian không phá vỡ trong ISO 8859-1. –

Trả lời

12

str_replace ("\ u00a0", "", utf8_encode ($ dat)). Nhưng điều đó không khắc phục được.

PHP chỉ có chuỗi byte chứ không phải chuỗi Unicode gốc; do đó không có thoát \u và bạn đã yêu cầu nó theo nghĩa đen để chuyển đổi chuỗi dấu chéo ngược-chữ-u trong đầu vào.

Để thoát khỏi nhân vật không gian không bị phá hủy bạn sẽ phải thay thế đi \xA0 (nếu được thực hiện trên các dữ liệu theo tiêu chuẩn ISO-8859-1 bạn có lẽ có trước khi đi qua để utf8_encode), hoặc \xC2\xA0 (nếu được thực hiện sau khi chuyển mã sang UTF- số 8).

utf8_encode chỉ chuyển mã ISO-8859-1 sang UTF-8, nó không chạm vào dấu cách, vì vậy sự nghi ngờ của tôi là bạn có ký tự khoảng trắng trong dữ liệu thực.

+1

+1 cho sự nghi ngờ của bạn, giống như tôi –

0

Hãy thử

$str = trim($str, chr(0xC2).chr(0xA0)) 
Các vấn đề liên quan