我正在从 Twitter 中提取推文并想在网页上显示它们,但我看到的不是表情符号,而是 ? 和 ? 等字符的框。我怎样才能像 Twitter 那样将它们显示为图像,或者如果这不可能,则将它们全部删除?
我试过:
item["text"] = item["text"].replace('?', "");
但是它抛出 js 错误。
最佳答案
拜托,拜托,永远不要盲目地删除大块文本,尤其是不要仅仅因为您看不到或理解它们;它破坏了信息。有人出于某种原因将它们放在那里;如果没有表情符号,包含表情符号的推文通常没有任何意义。
就其值(value)而言,您所看到的并不是真正的“二元”;它很可能是一个用十六进制拼写的 Unicode 代码点的小方 block 。对于?,那是 U+1F49C,所以你可能会看到 0 1 F 4 9 C .当您安装的字体都没有字形时,这就是 Unicode 字符的呈现方式。
要真正看到字符,您有多种选择。
获取 Symbola,并使用 @font-face 将其添加到您的网站像这样阻止:
@font-face {
font-family: Symbola;
src: url('Symbola.ttf') format('truetype');
unicode-range: U+1F???;
}
然后用font-family: Symbola, "your preferred font", sans-serif;设置你的页面字体.
这样做的缺点是,据我所知,CSS 的 font-family选择第一个存在的字体,不指定 Unicode 后备。所以在不支持 unicode-range 的浏览器中( Firefox ),这将在不是特别漂亮的 Symbola 中呈现您的整个页面。
你可以通过找到所有表情符号并将它们包装在 <span class="emoji"> 中来解决这个问题。 , 然后只对 .emoji 使用 Symbola元素。
找到所有表情符号并将它们替换为 <img>标签,就像 Twitter 那样。 Twitter 的图像都在包含代码点的 URL 中,例如https://abs.twimg.com/emoji/v1/72x72/1f43e.png ,因此只需重用它们就足够了。 (我有点惊讶 Twitter API 实际上不会为你做这件事。)
如果您想查找并替换所有表情符号,您可能只想查找所有星体层字符,即那些不在现代人类语言所在的基本多语言层中的字符。这些都是代码点为 U+10000 及以上的字符。
在 JavaScript 中,字符串并不是真正的字符串;它们是 16 位数字的数组。 16 位是四个十六进制数字,因此具有五个十六进制数字的 Unicode 代码点不适合单个 16 位数字。相反,JavaScript 使用可怕的 UTF-16 编码对它们进行编码,它使用两个 16 位数字:一个在 0xD800 到 0xDBFF 范围内,一个在 0xDC00 到 0xDFFF 范围内。两个数字一起称为“代理对”。这些数字都不是真正的 Unicode 代码点;整个 block 都保留用于此编码。
要找到所有的星界字符,你实际上是想找到所有的代理对:
/[\uD800-\uDBFF][\uDC00-\uDFFF]/
因此,Twitter 图像替换的实现可能如下所示:
var text = "hey babe ? how you doin";
// Split on surrogate pairs, and preserve the surrogates; this will give
// you an array that alternates between BMP text and a single surrogate
// pair: [text, emoji, text, emoji, text...]
var chunks = text.split(/([\uD800-\uDBFF][\uDC00-\uDFFF])/);
// A DocumentFragment is a DOM tree that can be manipulated freely without
// causing a reflow, so it's more performant for heavy tree-building and a
// good habit to get into
var frag = document.createDocumentFragment();
for (var i = 0, l = chunks.length; i < l; i++) {
if (i % 2 == 0) {
// Even-numbered chunks are plain text
frag.appendChild(document.createTextNode(chunks[i]));
}
else {
// Odd-numbered chunks are surrogate pairs
// We have TWO characters, but we want one codepoint; this is how
// you decode UTF-16 :(
var pair = chunks[i];
var codepoint = (
0x10000
| ((pair.charCodeAt(0) - 0xD800) << 10)
| (pair.charCodeAt(1) - 0xDC00)
);
var hex = codepoint.toString(16); // now it's in hex
var img = document.createElement('img');
img.src = "https://abs.twimg.com/emoji/v1/72x72/" + hex + ".png";
// Twitter uses pretty big images and just scales them down
// clientside; you could change these to whatever you want, or add
// a class here and use CSS to set the width/height to 1em to
// match the current font size
img.height = 16;
img.width = 16;
frag.appendChild(img);
}
}
// Now just stick it into the page somewhere
var el = document.createElement('p');
el.appendChild(frag);
document.body.appendChild(el);
这会创建一个 <img>根据选项 3,但您也可以轻松添加 <span class="emoji">然后选择选项 2。或者做任何你想做的事情,比如用它们的 Unicode 名称替换表情符号。 (Twitter 在每张图片上的 Unicode 名称为 title,但这里没有这样做,因为它需要包含一个巨大的列表,将代码点映射到名称 ☺)
关于javascript - 渲染或删除表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070515/
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于