2012-03-04 40 views
11

Tôi đã thực hiện một chức năng để xóa ngắt dòng bằng php không thành công, tôi đã thử tất cả mã thay thế và tôi vẫn nhận được ngắt dòng này, tôi tạo tệp json và tôi không thể đọc nó từ jsonp với jquery vì những ngắt dòng dường như phá vỡ tất cả.PHP xóa ngắt dòng hoặc CR LF không thành công

function clean($text) 
{ 
$text = trim(preg_replace('/\s+/', ' ', $text)); 
$text = preg_replace("/(\r\n|\n|\r|\t)/i", '', $text); 
return $text; 
} 

Khi tôi nhìn vào nguồn, có một số ngắt dòng appening trong tất cả các href, img và br đây là một json_encode đầu ra dụ:

<a 
href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\"> 

ngắt dòng afer a. nó hapenig để src img và br

cách duy nhất tôi có thể loại bỏ những phá vỡ nó với

$text = preg_replace("/\s/i", '', $text); 

Nhưng bạn understant rằng không có không gian còn lại trong tất cả các chuỗi và nó không phải là những gì chúng ta muốn.

+0

Thank cho tất cả nhưng cho đến bây giờ, không ai trong số các giải pháp này làm việc. Nhưng thường thì hầu hết các giải pháp này đều có tác dụng, nhưng tôi không hiểu tại sao lại là trường hợp của tôi, nó không phải là – Gino

+0

Cách duy nhất tôi tìm thấy để sửa chữa là '$ allcontent = preg_replace ('/ Gino

+0

I hit the same and no solutions in this post worked for me. I found another similar post and this solution worked for me...hence posting it here: http://stackoverflow.com/a/3340510/405117 – Vikram

Trả lời

0

sử dụng json_encode()json_decode() từ phần mở rộng JSON để xử lý JSON nhiệm vụ de/serialization:

$myobj = array('foo' => 'bar', 'foz' => 'baz') 

$json_myobj = json_encode($myobj); 
echo $json_myobj; 

$myobj = json_decode($json_myobj); 
print_r($myobj); 
25

này thay thế công trình tốt hơn cho tôi:

= str_replace (array("\r\n", "\n", "\r"), ' ', $text) 
+0

As a note, in the case of e-mails and other MIME encodings, simply replacing '\r\n' (CRLF) with '\n' should work fine. –

0

Có lẽ bạn có thể thử đi nhân vật văn bản bằng ký tự và gọi ord() trên mỗi ký tự, vì vậy bạn có thể xem các ký tự ngắt này có thực sự là \r,\n s không?

Gần đây tôi nhận được một vấn đề tương tự với khoảng trống được bật ra là không gian không thể phá vỡ ngay cả bên trong bảng ASCII (mã số 194 hoặc thứ gì đó).

Nếu bạn đang quan tâm đến giải pháp của tôi không phải là để thử và phá vỡ bộ lọc, nhưng để lọc tất cả mọi thứ ngoại trừ những gì được dự kiến ​​sẽ được trong văn bản, như vậy:

$text = preg_replace("/[^ \na-zа-я0-9`~\[email protected]#\$%\^&\*\(\)_\+\-\=\[\]\{\}\\\|;\:'\",\.\/\<\>\?]+/ui", "", $text); 
+0

hi Tony, this did nothing for me – Gino

1

Làm thế nào về điều này:

function clean($text) 
{ 
    $parts = explode(' ', $text); 
    foreach ($parts as $key => $value) 
     $parts[$key] = preg_replace('/\s/', ' ', $value); 
    return implode(' ', $parts); 
} 

Thật vậy, nếu thay vì làm sạch tệp JSON như thế này, bạn có thể sử dụng json_encode để tạo tệp, bạn sẽ loại bỏ vấn đề này trong bước trước.

+0

Oops, the original code had a big mistake. I have edited right now... –

+0

not working, i don't understand why with all these replace code my json output give me 14 line instead of one. my json output work on many domains and many host, but for this domain (Wordpress website) it give me line break – Gino

0

Một phương pháp tôi sử dụng là echo str_replace(array('\r\n', '\r', '\n', '\t'), array('\\r\\n', '\\r', '\\n', '\\t'), $text);

Điều này không là cho phép bạn xem những gì nhân vật đang gây ra sự đứt đoạn trong văn bản, và thay thế chúng một cách thích hợp. Ví dụ: nếu bạn có "\ n" vi phạm văn bản, khi bạn sử dụng mã này, nó sẽ hiển thị "\ n" ở vị trí của nó. Ví dụ:

<a 
href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\"> 

sẽ trở thành:

<a\n href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\"> 

Đương nhiên, có một số lượng lớn các nhân vật vi phạm khác mà có thể được sử dụng, nhưng \ r \ n, \ r, \ n và \ t là những cái được sử dụng phổ biến nhất.

+0

it's crazy but nothing apear. by the way, the json_encode is called this way 'echo $_GET['jsoncallback'].'('.json_encode(array('posts' => $ posts)).') '; ' – Gino

1

Làm thế nào về sau

function clean($text) 
{ 
    return trim(preg_replace("/(\s*[\r\n]+\s*|\s+)/", ' ', $text)); 
} 

phần đầu \s*[\r\n]+\s* sẽ thay thế bất kỳ ngắt dòng, nó dẫn không gian và nó tailing không gian vào chỉ là một không gian.

phần thứ hai \s+ sẽ thu hẹp khoảng trống vào một không gian.

sau đó trim() xóa không gian hàng đầu/điều chỉnh.

0
function clean($text) 
{ 
    return trim(preg_replace('/\\\\r|\\\\n|\\\\t/i', ' ', $text)); 
} 

Hoạt động tốt.

0

Nếu bạn muốn loại bỏ CR và giữ LFS, nó thực sự rất đơn giản (chỉ cần cảm giác phổ biến):

$text = str_replace("\r", "", $text); 
Các vấn đề liên quan