8.Ordinal
这个关键字在很多函数里面都有应用,在这里可以填写任意一个整数,也可以填All。如果填写数字,那么说明从返回的记录中取出对应顺序的值,而填写All的话将会返回所有的内容。
当使用Ordinal =All时,关联函数会把所有匹配过滤策略的记录都抓出来,由于参数只能存放一条记录,所以关联函数会生成一个参数数组。被关联的记录会以{关联参数名_关联id}的形式生成参数列表,并且在最后会有一个{关联参数名_count}的参数来存放被关联到的记录条数。
例如,上面写过的一个关联热搜关键字的例子,代码如下所示:
web_reg_save_param_ex( "ParamName=hotsearch", "LB=<a href=\"searcher.php?keyword=", "RB=&type=thread\">", SEARCH_FILTERS, LAST); |
当Instance设置为All时,代码变为:
web_reg_save_param_ex( "ParamName=hotsearch", "LB=<a href=\"searcher.php?keyword=", "RB=&type=thread\">", "Ordinal=ALL", SEARCH_FILTERS, LAST); |
运行代码后,关联将会返回所有匹配左右边界的内容,结果如下:
Action.c(20): Notify: Saving Parameter "hotsearch_1 = 结婚". Action.c(20): Notify: Saving Parameter "hotsearch_2 = 母婴". Action.c(20): Notify: Saving Parameter "hotsearch_3 = phpwind". Action.c(20): Notify: Saving Parameter "hotsearch_4 = testing001". Action.c(20): Notify: Saving Parameter "hotsearch_5 = 结婚". Action.c(20): Notify: Saving Parameter "hotsearch_count = 5". |
在使用ALL返回关联时,当关联的返回对象很长,就有可能导致参数长度溢出的问题。例如,我们关联一个板块中每一个帖子所在行的大多数信息,这里要关联的内容为:
<td class="subject" id="td_1882"> <a href="read.php?tid=1882" name="readlink" id="a_ajax_1882" class="subject_t f14">testewt</a> |
这一段数据相对以前关联的内容要长很多,而且由于一个板块会有20个帖子,如果使用ALL关键字会返回20次这样长度的内容,代码如下:
web_reg_save_param_ex( "ParamName=test", "LB=<td class=\"subject\"", "RB=</a></p></td>", "Ordinal=ALL", SEARCH_FILTERS, LAST); web_url("forum","URL=http://localhost:8000/phpwind85/thread.php?fid=5",LAST); |
当我们运行这样的关联时,会出现关联失败的情况。这个错误不是前面说到的关联边界设置导致关联失败错误,而是关联数据太长导致参数溢出而出现的关联失败错误。在这种情况下,我们就需要在关联前添加参数长度定义函数web_set_max_html_ param_len("999999")来避免参数长度不够,无法将关联的结果保存,导致最终关联失败的情况。
9.Save Offset
设置关联的内容偏移量,从第几位开始进行关联操作。回到最开始的例子,我们抓取的是You have successfully installed XAMPP on this system!,如果需要获得successfully installed XAMPP on this system!这个字符串,则不用改变左边界,只需要设置Save Offset为9即可,代码为:
web_reg_save_param_ex( "ParamName=temp", "LB=Congratulations:<br>", "RB=</b><p>", "Ordinal=1", "SaveOffset=9", SEARCH_FILTERS, "ContentType=text/html", LAST); |
对于一些定长度但是左边界比较难写的数据段用Save Offset可以很方便处理,不过在LR11中有了正则表达式这也不是什么问题了。