2013-02-28 4 views
2

У меня есть строка:Добавляя пробелы в строку

str="Myname" 

Я хочу, чтобы добавить четыре пробелы после строки. Что я сделал:

str=str+" "+"somename" 

Когда я напечатаю str, как <%= str %>, выход показывает только один пробел. Как я могу сделать эту работу? Я также пробовал:

str=str+" "*4+"somename" 

Это также дает тот же результат, что и приведенный выше. Я не хочу печатать это. Строка используется как переменная Ruby для других операций. Я могу сделать это в Ruby, но не в RoR.

ответ

5

Это связано с тем, как HTML обрабатывает пробелы. Что я предполагаю, что вы используете на основе синтаксиса типа Erb, который вы использовали. Если вы действительно должны выводить пробелы, используйте &nbsp;.

Но я предлагаю вам исправить это с помощью CSS.

+0

no. Я хочу его в рубине. это не для печати.эта строка используется для поиска в базе данных –

+0

Не могли бы вы отредактировать вопрос, чтобы показать, где именно вы его используете? Для меня '<%= %>' кажется довольно странным. – harm

+0

Возможно, это [sprintf] (http://www.ruby-doc.org/core-2.0/Kernel.html#method-i-sprintf), что вы ищете. – harm

0

В вашей переменной может быть 4 пробела, но браузер усекает лишние пробелы после 1 пробела, чтобы вы не просматривали их. попробуйте следовать

<pre> 
<%= str %> 
</pre> 

Вы увидите, что в ваш код добавлены пробелы. Чтобы достичь того, что вы пытаетесь сделать, введите  , а не пустое пространство

0

Если вы попробуете следующий код в консоли, вы увидите, что проблема связана с вашим html;

str="Myname" 
str=str+" "+"somename" 

=> "Myname somename" 

попробовать, как следовать

<pre> 
    <%= str %> 
</pre> 
+0

обратите внимание на данное редактирование. –

+0

, пожалуйста, объясните немного, я не понимаю, что вы пытаетесь сказать –

0

вы можете заменить пространства с строки HTML кодирования, а затем сделать с html_safe или сырье, как,

<%= raw "Myname somename".gsub(/\s/, "&nbsp;") %> 
2

После вашей же структуру, что это будет be

str = raw(str + "&nbsp;&nbsp;&nbsp;&nbsp;" + "somename")

В HTML, только в одном пробеле в подсчете, независимо от того, сколько. Поэтому вы должны использовать HTML Entity &nbsp; (означает Non Breaking SPace), чтобы показать более одного места.

Требуется часть raw, так как Rails по умолчанию не позволяет выводить HTML-объекты или любой фактический HTML по строкам, поскольку они могут использоваться недобросовестными пользователями для атаки вашего сайта и/или пользователей.

Таким образом, вы должны использовать raw, а также использовать &nbsp; в Rails.

0
<pre>I am a bad web programmer</pre> 

Предварительные метки проклятия существования и их следует избегать любой ценой. Используйте это в своем erb.

<%= raw(CGI.escapeHTML(str).gsub(/\s/, '&nbsp;')) %> 
Смежные вопросы