gpt4 book ai didi

ruby - Rails 3 和 html_safe 混淆(聊天中允许图片(微笑)但拒绝其他一切)

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:19 25 4
gpt4 key购买 nike

我这里有一个将表情符号(如“:-)”)替换为图标的模块:

module Smileize
PATH = "/images/smiles"
SMILES = [/\;\-?p/i, /\$\-?\)/, /8\-?\)/, /\>\:\-?\(/, /\:\-?\*/, /\:\-?o/i, /\:\-?c/i, /\;\-?\)/,
/\:\-?s/i, /\:\-?\|/, /\:\-?p/i, /\:\-?D/i, /\:\-?\?/, /\:\-?\(/, /\:\-?\)/]
def to_icon(key)
return "<img class='smiley' src='#{PATH}/smile#{SMILES.index(key) + 1}.png'/>"
end
module_function :to_icon
end

class String
def to_smile
Smileize::SMILES.each do |smile|
if self =~ smile
self.gsub!(smile, Smileize.to_icon(smile))
end
end
self
end
end

所以图片显示我使用的是html_safe,像这样:

<%= @message.text.to_smile.html_safe %>

但它不适合我,因为但是图片和其他标签也会显示。

我的问题是:如何只显示我的微笑,忽略其他标签?

最佳答案

我认为你需要这样做:

  1. HTML 编码字符串。
  2. 执行您的替换。
  3. 将最终结果标记为 HTML 安全。

像这样添加一个助手:

def expand_smilies(s)
s = ERB::Util::html_escape(s)
Smileize::SMILES.each do |smile|
s.gsub!(smile, Smileize.to_icon(smile))
end
s.html_safe
end

然后在您的 ERB 中:

<%= expand_smilies some_text %>

ERB 使用 ERB::Util::html_escape对 HTML 进行编码,因此如果您的目标是 ERB,那么自己使用它是有意义的。来电 html_safe在一个字符串上返回一些东西,ERB 在它是 HTML 编码的东西时会单独留下。

注意没有可用的html_safe!在字符串和 html_safe 上返回 ActiveSupport::SafeBuffer而不是字符串,因此您必须使用帮助器而不是猴子将新方法修补到字符串中。 ActiveSupport 确实将 html_safe! 方法修补到 String 中,但它所做的只是引发一个异常,说“不要那样做”:

def html_safe!
raise "You can't call html_safe! on a String"
end

关于ruby - Rails 3 和 html_safe 混淆(聊天中允许图片(微笑)但拒绝其他一切),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6505116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com