当Ruby / Mechanize找到一个突出显示的u字母时,它会中止

时间:2010-11-10 23:49:21

标签: ruby mechanize html-form diacritics

我想使用Ruby / Mechanize阅读这种形式的PHP脚本:

<form name="editevent" method="post" action="/index.php" enctype="multipart/form-data">
    <input type="text" name="veranstaltung"> 
    <select name='ortid'> 
    <option value='2'>Kaminwerk</option> 
    <option value='3'>Pitú</option> 
    <option value='4'>Apollo-Center</option> 
    </select> 
      <input type="text" name="neutermin" id="neutid" /> 
    <textarea name="beschreibung" cols="40" rows="7"></textarea><br /> 
      <input type="submit" name="button" value="Absenden"> 
</form> 

在Ruby中我得到了:

form = page.forms.first 
 form.fields.each { |f| puts f.name }

但Ruby只能找到名为“veranstaltung”和“ortid”的表单元素

我发现问题出现在“Pitú”这个词上带有重音的“你”字母。证明:当我打印html代码的inner_html时,表单的一部分看起来像这样:

<form name="editevent" method="post" action="/index.php" enctype="multipart/form-data">
        <input type="text" name="veranstaltung"> 
        <select name='ortid'> 
        <option value='2'>Kaminwerk</option> 
        <option value='3'>Pit</form>

表格的另一部分已经消失了!尽管有“ú”,我怎么能完全使用那个表格? 如果有人能提供帮助,我会很高兴。

1 个答案:

答案 0 :(得分:0)

什么版本的Ruby?它闻起来像1.8.7,这不是Unicode精明。如果可以,请升级到1.9.2。

在解析内容时指定语言的代码集也很重要。通常情况下,这些信息都在DOCTYPE语句中,但如果不是,则必须给语言提供一些预期的信息。

因为这些字符嵌入在PHP中,它们可能是UTF-8,或者可能是WIN-1252或ISO-8951的变体,这意味着它们是单字节字符。 Mechanize使用Nokogiri进行解析,它会想知道语言是什么来为您提供最佳的值解码。当Nokogiri无法根据自己的喜好解析某些内容时,它会在errors属性中添加错误,因此您可能需要在那里查看。

所以,如果我是你,我会看看发送内容时DOCTYPE是什么,还检查HTTP标头,看看是否有东西会定义代码集。

这是我在互联网上多次遇到的一个问题,因为HTML编写得很糟糕,所以经常无法遵循规范。