我正在尝试用 Ruby on Rails 中的换行符替换字符串中的空格,
name = 'john smith'
到目前为止我已经尝试了以下方法:
name.gsub!(" ", "\n")
name.gsub!(" ", "<br>")
name.sub(" ", "\n")
name.sub(" ", "<br>")
但以上均无效。
将字符串标记为 html_safe
时必须小心,特别是如果它可能包含用户输入:
name = 'john smith<script>alert("gotcha")</script>'
name.gsub(' ', '<br>').html_safe
#=> "john<br>smith<script>alert(\"gotcha\")</script>"
Rails 会按原样输出该字符串,即包括 <script>
标签。
为了利用 Rails 的 HTML 转义,您应该只将受信任的部分标记为 html_safe
.对于手动连接的字符串:
''.html_safe + 'john' + '<br>'.html_safe + 'smith<script>alert("gotcha")</script>'
#=> "john<br>smith<script>alert("gotcha")</script>"
如您所见,只有 <br>
标签完好无损,其余部分已正确转义。
有几个帮助程序可用于构建安全字符串以及用于构建 HTML 标记。在你的情况下,我会使用 safe_join
和 tag
:
name = 'john smith<script>alert("gotcha")</script>'
safe_join(name.split(' '), tag(:br))
#=> "john<br />smith<script>alert("gotcha")</script>"
我是一名优秀的程序员,十分优秀!