Ini mungkin tampak seperti sebuah penipuan, tetapi yakinlah tidak - saya telah mencari SO dan juga seluruh web untuk jawaban atas masalah saya dan akhirnya menemukan "solusi" yang sama tidak cukup berulang-ulang. Bagaimanapun, ini dia:
Saya menyimpan input pengguna dari textarea ke database MySQL (dalam lingkungan WordPress, tapi itu tidak masalah bagi masalah ini, saya percaya). Ini kemudian diambil dari DB untuk ditampilkan ke Admin di backend situs. Masalah terjadi ketika pengguna mengirim teks dengan jeda baris (yaitu tekan tombol Enter).
Contoh string mungkin terlihat seperti ini:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!
Greetings,
Bill
Tidak ada karakter garis akhir ("\ n", "\ r", atau sejenisnya) dalam string.
Saya menggunakannya nl2br()
untuk menghasilkan output HTML, tapi itu tidak cukup. Hasilnya kemudian adalah:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill
Yang, sejauh yang saya mengerti, adalah nl2br()
hasil yang diharapkan , karena hal itu menyisipkan tag dan tidak seharusnya menggantikan jeda baris di tempat pertama?
Namun format yang saya butuhkan adalah sebagai berikut:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill
Jika string memiliki karakter EOL seperti "\ n" di dalamnya, saya akan memukulnya dengan baik str_replace()
atau preg_replace()
selesai, tetapi saya tidak tahu jarum apa yang harus dimasukkan ke salah satu fungsi tersebut jika tidak ada karakter di sana. di tempat pertama.
Saya dapat secara manual mengakses bidang yang relevan di DB, tekan Backspace untuk setiap linebreak dan apa yang nanti saya ingin lakukan dengan string berfungsi. Jadi saya tahu saya perlu format di atas.
Jawaban:
Anda harus dapat menggantinya dengan preg yang menghapus semua baris baru dan carriage return. Kode tersebut adalah:
Meskipun
\n
karakter tidak muncul, jika Anda mendapatkan carriage return ada karakter yang tidak terlihat di sana. Pengganti preg harus mengambil dan memperbaikinya.sumber
/\r|\n|\r\n/
Solusi Ben dapat diterima, tetapi str_replace () jauh lebih cepat daripada preg_replace ()
Menggunakan lebih sedikit daya CPU, mengurangi emisi karbon dioksida dunia.
sumber
sumber
Itu karena
nl2br()
tidak menghapus baris baru sama sekali.Gunakan
str_replace
sebaliknya:sumber
Anda juga dapat menggunakan trim PHP
sumber
Untuk bekerja dengan baik juga pada Windows saya sarankan untuk menggunakan
"\r\n"
- untuk Windows,"\r"
- untuk Mac dan"\n"
- untuk Linuxsumber
\r
dan\n
dihapus dalam string, mengapa tidak demikian bagi mereka yang mengikuti satu sama lain secara langsung?\r\n
Windows dan tidak bekerja di Linux.\r\n
PERTAMA akan membantu, karena itu berarti satu koma daripada dua untuk setiap bagian jika garis itu putus\r\n
dulu, lalu kami ganti\r
dan\n
, saya sudah mengedit jawaban saya.\r
dan\r
, tidak perlu menghapus\r\n
, Anda dapat penggunastr_replace(array("\r","\n"), "", $buffer);
untuk mendapatkan hasil yang sama.str_replace (PHP_EOL, null, $ str);
sumber
Sesuatu yang sedikit lebih fungsional (mudah digunakan di mana saja):
Menggunakan PHP_EOL sebagai parameter penggantian pencarian juga merupakan ide bagus! Pujian.
sumber
Alternatif bawaan: trim ()
Itu ada di sana untuk menghapus jeda baris dari berbagai jenis file teks, tetapi tidak menangani html.
sumber
Saya menggunakan 3 baris untuk melakukan pekerjaan ini, jadi anggap $ s sebagai "barang" Anda ...
sumber