我想使用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>
表格的另一部分已经消失了!尽管有“ú”,我怎么能完全使用那个表格? 如果有人能提供帮助,我会很高兴。
答案 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编写得很糟糕,所以经常无法遵循规范。