রেলগুলিতে - নতুন লাইনে <br> <br> এ রূপান্তর করার জন্য কি রেল পদ্ধতি আছে?


115

Ails n এ রূপান্তর করার জন্য কি কোনও রেলসি উপায় আছে <br>?

বর্তমানে, আমি এটি এইভাবে করছি:

mystring.gsub(/\n/, '<br>')

দুজন / চরিত্র কী করবে? আমি এর পরিবর্তে ব্যবহার করুন "।
alamodey

দুই /
অক্ষরটি

উত্তর:


260

হ্যাঁ, রেলগুলি এমনটি রয়েছে simple_formatযা আপনি যা সন্ধান করছেন ঠিক তা করে এবং কিছুটা আরও ভাল যেহেতু এটি অনুচ্ছেদে ট্যাগও যুক্ত করে। দেখা

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

উদাহরণ:

 simple_format(mystring)

নোট যেটি simple_formatমৌলিক এইচটিএমএল ট্যাগকে মঞ্জুরি দেয় তবে এমন পাঠ্যও পাস করে sanitizeযার মাধ্যমে সমস্ত স্ক্রিপ্ট সরিয়ে ফেলা হয়, সুতরাং এটি ব্যবহারকারীর ইনপুট জন্য নিরাপদ হওয়া উচিত।


1
ধন্যবাদ- আমার এটি জানা উচিত ছিল - আমি অন্যান্য প্রকল্পগুলিতে সরল_ফর্ম্যাট ব্যবহার করেছি।
daustin777

3
এটি লক্ষ্য করা উচিত যে simple_formatপ্রদত্ত পাঠ্যটি স্বয়ংক্রিয়ভাবে <p>ট্যাগগুলিতে মোড়ানো হয় এবং এই কার্যকারিতাটি এড়ানো যায় না।
আইজাক মুর

1
সরল_ফর্ম্যাটটি কোনও সুরক্ষা ঝুঁকি যদি এটি কোনও ওয়েব অ্যাপ্লিকেশানের জন্য ব্যবহার করে। এটি রেলে javascript:alert(\no!\)রেফারেন্সের মতো বিশেষ সিনট্যাক্সের ব্যাখ্যার উপর নির্ভর করে । দূষিত হ্যাকারগুলির সাথে কাজ করার জন্য অফুরান বৈচিত্র এবং ভবিষ্যতের বিভিন্নতা থাকতে পারে।
ক্লো

3
4 রেল থেকে, সরল_ফর্ম্যাট wrapper_tagবিকল্প রয়েছে যা <p>অন্য কোনও কিছুর জন্য ট্যাগ পরিবর্তন করতে পারে
লুওস

41

আপনি এটিকে আরও সাধারণ করে তুলতে পারেন:

mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')

এইভাবে আপনি ডস, * এনআইএক্স, ম্যাক এবং দুর্ঘটনাজনিত অবৈধ লাইন সমাপ্ত হবে।


5
জেনারালাইজড, নন-রেল সমাধানের জন্য +1। একজন রুবি দেব হিসাবে যিনি রেল পছন্দ করেন না, এর মধ্যে খুব কমই রয়েছে।
উইনফিল্ড ট্রেইল

3
ভাল রেগেক্স, ধন্যবাদ। আপনি যদি অনুরূপ কিছু করতে চান তবে simple_formatসেই রেজেেক্সে বিভক্ত হয়ে যেতে পারেন, ট্যাগগুলি mapখোলার এবং বন্ধ করার ক্ষেত্রে স্ট্রিং মোড়কে ব্যবহার করুন pএবং তারপরে এগুলিতে যোগদান করুন। mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.joinএটি করা উচিত, যদিও আমি এটি পরীক্ষা করেছিলাম না।
ব্রায়ান কুং

দুর্দান্ত ট্রিক @ ব্রায়ানকং এটি ঠিক যা খুঁজছিলাম আমি!
alexventuraio

এছাড়াও আপনি উত্পন্ন এইচটিএমএল ট্যাগ একটি পাগল নিরাপদ দেখতে করতে চান তাহলে, শুধু ভালো কিছু করতে এবং আপনি প্রতিটি উত্পন্ন আইটেমের জন্য একটি শ্রেণী যোগ করতে পারেন: <%= sanitize(planning.benefits.split(/(?:\n\r?|\r\n?)/).map {|x| "<li class='collection-item'>#{x}</li>"}.join) %>। এবং এটি একটি কবজ বুহুর মতো কাজ করে!
alexventuraio

যদিও এই উত্তরটি যথেষ্ট পরিমাণে উত্সাহিত করা হয়েছে, আমি যুক্ত করতে চাই যে এটি সাইট স্ক্রিপ্টিং অতিক্রম করার পক্ষে সংবেদনশীল। আপনি কেবলমাত্র এটি করতে পারেন, যদি আপনি ইনপুটকে বিশ্বাস করেন (যেমন কোনও ব্যবহারকারী ইনপুট নয়)। অন্যথায় mystringনির্বিচারে এইচটিএমএল থাকতে পারে।
নোবডিস নাইটমেয়ার

29

আপনি যখন ব্যবহারকারী ইনপুট নিয়ে কাজ করছেন তখন আপনার এটিকে যত্নবান হওয়া উচিত। ট্যাগ
simple_formatসন্নিবেশ করায় <br>তবে এটি অন্যান্য এইচটিএমএল ট্যাগকে মঞ্জুরি দেয় !

সরল_ফর্ম্যাট ব্যবহার করার সময়, <b>Hello</b>" হ্যালো " হিসাবে রেন্ডার করা হবে , আপনি এটি নাও চাইবেন।

পরিবর্তে আপনি <%= h(c.text).gsub("\n", "<br>").html_safe %>
h()প্রথমে এইচটিএমএলকে এনকোড করতে পারবেন , gsubলাইন ব্রেকটি প্রতিস্থাপন করবে এবং ট্যাগগুলি প্রদর্শন করার html_safeঅনুমতি দেবে <br>

এটি ব্যবহারকারী কী প্রবেশ করিয়েছে ঠিক তা প্রদর্শন করবে। এটি উদাহরণস্বরূপ মন্তব্যে এইচটিএমএলকে আলোচনা করার অনুমতি দেয়।


হাঁ। এই মত, এটি কাজ করে এবং আমি আউটপুট চাই ইনপুট মত, দেখানো আয় সঙ্গে।
টিম

simple_formatবেসিক এইচটিএমএল ট্যাগগুলিকে মঞ্জুরি দেওয়ার সময় এটি নোট করা গুরুত্বপূর্ণ যে এটি পাঠ্যটিও পাস করে sanitizeযা সম্ভাব্যভাবে দূষিত হতে পারে এমন কোনও কিছু সরিয়ে দেয়। apidock.com/rails/ActionView/Helpers/TextHelper/simple_format
linesarefuzzy

এটি লক্ষণীয় গুরুত্বপূর্ণ যে এমনকি স্যানিটাইজড এইচটিএমএলও প্রাথমিক লিঙ্কগুলিকে মঞ্জুরি দেয়। কোনও লিঙ্ক ব্যবহারকারীদের ফিশিং সাইটে চালিত করতে ব্যবহার করা যেতে পারে। আপনি যদি আপনার অ্যাপ্লিকেশনটির মাধ্যমে প্রেরিত কোনও ইমেলটিতে কোনও ব্যবহারকারী-উত্পন্ন বার্তা প্রদর্শন করে থাকেন তবে আপনাকে এটি সম্পর্কে বিশেষত যত্নবান হতে হবে।
জেমস

17

সহজভাবে ব্যবহার

white-space: pre-line;

আপনার সিএসএস এবং পাঠ্য লাইন বিরতি মোড়ানো হবে।


হ্যাঁ কেবল সরল_ফর্ম্যাটটি আমার পক্ষে বিভিন্ন ক্ষেত্রে নতুন কণ্ঠস্বরযুক্ত হওয়ার মতো ক্ষেত্রে কাজ করে না। যেমন \ r \ n \ r \ n
ইমাসি

1
চমৎকার মার্জিত সমাধান যা ওপি অনুরোধ করছে ঠিক তেমন করে এবং আরও কিছু নয় - এইচটিএমএল ট্যাগ সহ পাঠ্য এইচটিএমএল হিসাবে রেন্ডার হবে না। আমার ক্ষেত্রে আমি আউটপুট ঠিক ইনপুটের সঙ্গে মিলছে চেয়েছিলেন (যেমন, <b> </ b> বোল্ড টেক্সট প্রদর্শন করা হবে না।
ডেভিড

1

আপনি যা করতে চাইছেন তা আপনিও বিবেচনা করতে পারেন - আপনি যদি লোকেরা প্রবেশ করানো পাঠ্যের সুন্দরভাবে ফর্ম্যাট করে থাকেন তবে আপনি মার্কডাউনের মতো একটি ফিল্টার বিবেচনা করতে পারেন যাতে আপনার ব্যবহারকারীরা এইচটিএমএল জাতীয় কৃমি ছাড়াই তাদের পাঠ্য বিন্যাস করতে দেয়। আপনি জানেন, এটি স্ট্যাক ওভারফ্লোতে এখানে রয়েছে।


0

নাঃ। আপনার যা আছে তা সাধারণত ব্যবহৃত বিকল্প। বেশিরভাগ লোকেরা যে সংজ্ঞাটি ব্যবহার করেন তা হ'ল:

   def nl2br text
       text.gsub(/\n/, '<br/>')
   end

এটি একই নামে পিএইচপি ফাংশনটির কার্যকারিতা নকল করে কারণ এটি এর নামকরণ হয়েছে


1
আমি উঁচুতে যাই নি, তবে আমি তাদের এইভাবে ব্যাখ্যা করব: সরল_ফর্ম্যাট জাতীয় কিছু বিবেচনায় নিতে ব্যর্থ হওয়া উত্তরটি বিরক্তিকর বলে মনে হয় না, তবে একটি উত্তর অবশ্যই "না"। শুরুতে মানুষকে আর কোনও কিছু দেখার থেকে নিরুৎসাহিত করে।
সিউসয়েড

0
mystring.gsub(/\r\n|\r|\n/, '\n')

আমার জন্য কাজ


0

আপনি এটি করতে পারেন simple_format(h(text))- এটি hনিশ্চিত করবে যে কোনও এইচটিএমএল রেন্ডার করা হয়নি।

অন্যান্য উত্তরে উল্লিখিত হিসাবে, এটি আপনি যা চেয়েছিলেন তার চেয়ে কিছু বেশি করবে। এটি পুরো জিনিসটি গুটিয়ে রাখে <p>এবং যদি আপনার কোথাও ডাবল নিউলাইন থাকে তবে আরও অনুচ্ছেদ যুক্ত করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.