参考文献:
http://mikeburnscoder.wordpress.com/2006/11/11/truncating-html-in-ruby/
这里不使用hpricot,而是使用ruby自己带的库rexml中的pullparser
将文件取名为string.rb,并放到rails项目的lib目录下,当然也可以根据需要,改写成helper(我就是这么做的)。
require 'rexml/parsers/pullparser'
class String
def truncate_html(len = 30)
p = REXML::Parsers::PullParser.new(self)
tags = []
new_len = len
results = ''
while p.has_next? && new_len > 0
p_e = p.pull
case p_e.event_type
when :start_element
tags.push p_e[0]
results << "<#{tags.last} #{attrs_to_s(p_e[1])}>"
when :end_element
results << "</#{tags.pop}>"
when :text
results << p_e[0].first(new_len)
new_len -= p_e[0].length
else
results << "<!-- #{p_e.inspect} -->"
end
end
tags.reverse.each do |tag|
results << "</#{tag}>"
end
results
end
private
def attrs_to_s(attrs)
if attrs.empty?
''
else
attrs.to_a.map { |attr| %{#{attr[0]}="#{attr[1]}"} }.join(' ')
end
end
end
1、首先使用html格式字符串初始化PullParser:
p = REXML::Parsers::PullParser.new(self)
2、然后使用pull函数每次获取一个元素:
e = p.pull
假设字符串为:
str = '<div id="head">some text<h1>head</h1></div>'
那么上面的语句返回一个对象e,其中
e.event_type = :start_element
e[0] = 'div'
e[1] = {"id" => "head"} # 一个保存tag属性的hash
3、再次执行
e = p.pull
那么就会返回一个
e.event_type = :text
的对象。
4、空白和中文字符长度处理
如果要去除字符串的空白,使用:
string.strip
如果要获取包含中文字符的字符串的字符长度(非字节长度),使用:
string.split(//).length
分享到:
相关推荐
- 如果不关心事务或触发器,使用`TRUNCATE`。 - 如果希望保留事务或触发器,使用`DELETE`。 - **整理表内部碎片**:可以先使用`TRUNCATE`加上`REUSE STORAGE`选项来释放空间,然后再重新导入或插入数据,以此达到...
create or replace procedure proc_truncate_aud as begin execute immediate 'truncate table sys.aud$'; end; ``` 在创建了存储过程后,需要赋予存储过程的执行权限给相应的用户。例如,可以使用以下语句赋予 ...
- **执行存储过程**:最后,用户可以通过调用存储过程`proc_truncate_aud`来执行截断操作。 ```sql CALL SYS.proc_truncate_aud(); ``` ##### 2. 监控与维护 - **审计表记录统计**:可以使用以下SQL语句来查看...
通过使用`truncate-html`,开发者可以更精细地控制内容的显示,确保用户体验不受到影响。 这个库的使用方式通常包括以下步骤: 1. **安装**:首先,你需要通过npm(Node.js包管理器)来安装`truncate-html`。在...
在这个特定的情况下,`truncate_header2.m`使用了*nix(Unix-like)系统的几个命令行工具,这包括: 1. **wc**: "word count",用于统计文件的行数、单词数和字符数。在这里,它可能被用来确定文件的总行数,以便...
需要注意的是,在SQL Server 2008及更高版本中,`TRUNCATE_ONLY`选项在`BACKUP LOG`语句中已被弃用。在这些版本中,你应该先将数据库设置为简单恢复模式,然后使用`DBCC SHRINKFILE`来减小日志文件尺寸。 在日志...
不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。 其语法结构为: 代码如下:...
1,对其它用户下的表执行trundate ...SQL> create table Z_TRUNCATE_T(ID number); Table created. SQL> insert into Z_TRUNCATE_T select 1 from dual; 1 row created. SQL> commit; Commit complete. SQL> select
`truncate_header.m`是完成这一任务的MATLAB脚本。在这个脚本中,可能包含了读取大文件、定位头部结束位置、以及从文件中删除或跳过头部信息的代码。由于大文件可能无法一次性加载到内存,因此通常会使用逐块读取...
以前从网上找到的一个smarty模板的中文截取函数cn_truncate,原来的实现方法有几个bug,我对它基本上重写了一遍。不过实现的功能和思想还是借鉴原来函数的。最重要的是解决了中英文混合时候的截取计算长度的问题。...
`truncate-html`是一个专门解决这个问题的前端开源库,它允许开发者在不破坏HTML结构的情况下,智能地截断HTML文本。这个库的核心功能是提供一种方式来控制HTML内容的长度,同时保持内容的可读性和格式完整性。 在`...
对于堆组织的表,如果不使用表锁,DELETE 后的空页可能需要后台进程逐步回收。而对于索引,DELETE 同样会留下空页,但这些空页通常会被更快地回收。 另外,TRUNCATE TABLE 对于标识列(identity column)的影响也是...
由于`TRUNCATE`不记录单行删除,所以它在速度上比`DELETE`快很多,且不触发任何与删除相关的触发器或回滚段。然而,这也意味着`TRUNCATE`操作一旦执行,数据就无法通过正常的数据库事务回滚来恢复,这对于初学者来说...
1. **smarty_modifier_truncate_utf8**: 用于UTF-8编码下的中文字符串截取。 2. **gbk_strlen**: 计算GBK编码下字符串的长度。 3. **gbk_substr**: 在GBK编码下截取字符串。 4. **smarty_modifier_truncate_gbk**: ...
TRUNCATE TABLE `ecs_admin_log`; TRUNCATE TABLE `ecs_article`; TRUNCATE TABLE `ecs_brand`; TRUNCATE TABLE `ecs_comment`; TRUNCATE TABLE `ecs_category`; TRUNCATE TABLE `ecs_goods`; TRUNCATE TABLE `ecs_...
在Oracle数据库中,`TRUNCATE TABLE`是一个用于删除表中所有数据的命令,它与`DELETE`语句不同,不记录任何删除操作,并且在大多数情况下执行速度更快。然而,一旦执行`TRUNCATE TABLE`,数据通常无法通过常规的...
与使用`DELETE FROM`语句相比,`TRUNCATE TABLE`在执行效率上更高,因为它不涉及记录删除日志的操作,而是直接释放已分配的空间。 #### 四、总结 通过上述介绍可以看出,在ZenCart的二次开发过程中,合理使用SQL...
- **速度快**:由于 `TRUNCATE` 不记录日志信息,因此执行速度非常快。 - **不支持回滚**:由于它属于 DDL 命令,因此无法通过事务回滚来恢复被删除的数据。 - **不触发触发器**:`TRUNCATE` 操作不会触发任何...