2012-08-14 23 views
8

tôi sử dụng jQuery để đếm giá trị của một textarea khi đang bay.Nhận kết quả tương tự cho php 'str_len' như đối với jQuery '.val length() `()

function count_chars() { 
    count_chars=$('#text_textarea').val().length; 
} 

... đó trở đi gửi tuần tự hóa biểu mẫu, gửi văn bản của textarea qua ajax tới tệp php, sau đó xác thực văn bản ở phía máy chủ. Tuy nhiên, tôi gặp vấn đề với dòng mới và không gian.

Tất nhiên, nếu tôi chỉ nhận được văn bản "như nó" từ văn bản, php sẽ đếm mỗi dòng mới là hai hoặc 4 ký tự (\n, ...). Vì vậy, tôi đã cố gắng để thay thế bằng một cái gì đó như thế này:

strlen(str_replace(array("\r", "\n"), ' ', $text))) 

hay này:

strlen(preg_replace('/\s+/', ' ', trim($text))) 

Tuy nhiên, nếu tôi có ví dụ 10 đoạn văn và jQuery trả về 2500 ký tự, php sẽ trả về 2510 hoặc 2490, tùy thuộc vào việc tôi thay dòng mới bằng dấu cách hay xóa hoàn toàn chúng. Vì vậy, sự khác biệt là 20, nhưng chỉ có 10 dòng mới ...?

Tôi đang thiếu gì? Làm thế nào tôi có thể nhận được php để trả lại kết quả tương tự như jQuery? Đâu là vấn đề, trong php hoặc trong jQuery?

+0

Bạn sử dụng mã hóa ký tự nào? Khách hàng của bạn chạy trên hệ điều hành nào? (Windows sử dụng các kết thúc dòng khác với unix). – Maerlyn

+0

@Maerlyn: tốt, nó sẽ chạy trên một máy chủ web, nơi tôi không có ý tưởng ngay bây giờ thời tiết nó là cửa sổ hoặc Linux, nó chỉ là chia sẻ lưu trữ ... bộ ký tự là utf8, nhưng nó quan trọng ở đây? – Chris

+0

Có thể bạn sẽ phải bình thường hóa nguồn cấp dữ liệu dòng ở cả hai nơi. Tôi không nghĩ rằng bạn có thể kiểm soát những gì trình duyệt chèn theo mặc định khi người dùng nhấn "Return". –

Trả lời

3

này nên làm việc:

strlen(str_replace("\r", '', $text))) 

Giải thích:

strlen(str_replace(array("\r", "\n"), ' ', $text)))

Ở đây, bạn đang thay thế \ r \ n với một không gian, vì vậy số lượng nhân vật không thực sự thay đổi .

strlen(preg_replace('/\s+/', ' ', trim($text)))

Ở đây bạn đang giảm khoảng trắng liên tục vào một đơn ' '.

+2

Bạn có thể giải thích cho anh ta tại sao '/ \ s + /' không thực hiện mẹo ở đây . Đó là với '/ \ s + /' anh ta đang thu hẹp khoảng trống. Và tôi sẽ đi với 'preg_replace ('/ (?: \ R | \ n) /', '', trim ($ text))' chỉ để chắc chắn. – Prusse

+0

@Prusse có, đã hoàn tất! – Dogbert

+0

cảm ơn bạn, Dogbert! Nó vẫn cho tôi kết quả sai, thật không may. Tôi gõ 12345, sau đó 5 không gian và 5 dòng mới - jQuery cho biết 15, php nói 20 ... – Chris

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