Ben API yoluyla metni almak ve bazen metin şöyle olabilir:
hello
world!
How are you?
Ama böyle olması gerekiyor metni:
hello world! How are you?
Bunu nasıl?
you can replace the newlines in the text by doing:
$newmsg = str_replace("\n",' ',$yourmsg);
Here is the link to the php function documentation: http://php.net/manual/en/function.str-replace.php
EDIT: yapar bu yüzden yerine "helloworld" bir "merhaba dünya ..." kodu bir boşluk eklendi
Burada muhtemelen kullanmak gerçekten çok saçma bir çözüm tüm olası satır sonları sorumluydu emin olmak için, (akılda ayı, ocdcoder cevabı sadece çalışıyor):
$line_ends = array("\r\n", "\r", "\n"); //notice the order is important.
$new_msg = str_replace($line_ends, " ", $orig_msg);
Çift hat uçları varsa, bu yolu, onlardan kurtulur, ama değilse, o tek satır sonları için geri ve çekler gider.
Eğer daha karmaşık almak istiyorsanız Ancak, satır sonları ile olası taşıma-döner yerini alabilir:
$msg_newline_fix = str_replace("\r", "\n", $orig_message);
$msg_double_newline_fix = str_replace("\n\n", "\n", $msg_newline_fix);
$newmsg = str_replace("\n", " ", $msg_double_newline_fix);
Fakat yine de, ben böyle biraz tuhaf değilim. Başka çılgın bir çözüm olabilir:
$msg_newline_fix = str_replace("\r", "\n", $orig_message);
$msg_array_lines = explode("\n", $msg_newline_fix);
foreach($msg_array_lines as $msg_line){
$clean_line = rtrim($msg_line);
if($clean_line !== '') {
$msg_clean_array[] = $clean_line;
}
}
$new_msg = implode(" ", $msg_clean_array);
Ama biliyorsunuz eğer satır sonları yeni hatlar (\n) olacak ve taşıyıcı olmayan iadeler (\r) o zaman basit bir tek satır str_replace muhtemelen güvenlidir.
Son olarak, aslında yeni bir paragraf, gibi bir şey gösterdiğinde satır sonlarını korumak isteyebilirsiniz:
Hello
World!
This is a
new paragraph.
Hangi durumda, ben (yani biz tahmin değil bu sürekli aynı şey yapma) ilk hat sonları normalleştirilmesi ve sonra geri dönün ve yeni hat ile değiştirebilirsiniz güvenli belirteci çeşit ile bu boş satırları değiştirmenizi öneririz. Gibi bir şey:
$msg_carriage_fix = str_replace("\r", "\n\n", $orig_message);
$msg_double_carriage_fix = str_replace("\n\n\n", "\n\n", $msg_newline_fix);
Şimdi biz sonunda yalnızca bir \n, biz boş hatları dahil olmak üzere her satırı, biliyorum noktada var olan. Iki \n, ve sonra iki ile bir satırda sadece üç \n değiştirilmesi ile potansiyel \r yerine \n biz riskini önlemek hiçbir satırbaşı \r s ilk etapta olsaydı herhangi bir satır sonlarını kaldırarak. Sonra nihayet yapabilirsiniz:
$msg_hold_true_linebreaks = str_replace("\n\n", "%line-break%", $msg_double_carriage_fix);
$msg_strip_new_lines = str_replace("\n"," ",$msg_hold_true_linebreaks);
ve son ama en az değil:
$new_msg = str_replace("%line-break%","\n",$msg_strip_new_lines);
Ancak, bu gerçekten bu doğru bir satır sonu tutmak istiyorsanız ve yalnızca olduğunu size taşıma-getiri, line-biter, ve korkunç \r\n için hazır ekstra emin olmak istiyorsanız.
Henüz başka bir sürümünü göstermek olacağını olabilir kısa ve balonunu patlatarak patlayabilir kullanmayı gerektirir, ama ben artık bu kadar yeter eminim.
İşte satır sonları ve kasıtlı satır sonları hem açıklamaya çalışan bu son öneri, biraz daha basit bir versiyonu:
$msg_rn_fix = str_replace("\r\n", "\n", $orig_msg);
$msg_r_fix = str_replace("\r", "\n", $msg_rn_fix);
Şimdi her satırı boş hatları dahil olmak üzere, tek bir \n ile biter biliyorum ...
$msg_array = explode("\n", $msg_r_fix);
Normal çizgiler, her bir dizi değeri olsun, ama biz de biliyoruz ki dizi değeri bir kasıtlı zor dönüş olduğunu, bir şey olup olmadığını ...
foreach($msg_array as $msg_line) {
$clean_msg_lines[] = ($msg_line == '') ? "\n" : $msg_line;
}
then we put it all back together:
$new_msg = implode(" ", $clean_msg_lines);
Tek kusuru, her satır sonundan önce ve sonra ekstra bir boşluk olacak olmasıdır. Bu kolayca sabittir:
$new_msg = str_replace(" \n ", "\n", $new_msg);
Ben yorumsuz aşağıda kopyalamak için gidiyorum, o kadar çok bu son çözüm gibi.
$msg_rn_fix = str_replace("\r\n", "\n", $orig_msg);
$msg_r_fix = str_replace("\r", "\n", $msg_rn_fix);
$msg_array = explode("\n", $msg_r_fix);
foreach($msg_array as $msg_line) {
$clean_msg_lines[] = ($msg_line == '') ? "\n" : $msg_line;
}
$new_msg = implode(" ", $clean_msg_lines);
$new_msg = str_replace(" \n ", "\n", $new_msg);