Ruby / Mechanize прерывает работу, когда находит подчеркнутую букву u - PullRequest
0 голосов
/ 11 ноября 2010

Я хочу прочитать эту форму PHP-скрипта, используя Ruby / Mechanize:

<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"

я обнаружил, что проблема заключается в букве "u" с ударением на ней в слове "Pitú".Доказательства: когда я печатаю inner_html 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 голосов
/ 11 ноября 2010

Какая версия Ruby?Он пахнет как 1.8.7, что не является здравым смыслом Unicode.Если вы можете, обновитесь до 1.9.2.

Также важно указать кодовый набор языка при анализе содержимого.Часто эта информация содержится в выражении DOCTYPE, но если это не так, вам нужно дать подсказку языку о том, чего ожидать.

Поскольку эти символы встроены в PHP, они могут быть UTF-8или, может быть, вариант WIN-1252 или ISO-8951, который подразумевает, что они будут однобайтовыми символами.Механизм использует Nokogiri для анализа, и он захочет узнать, какой язык дает вам наилучшее декодирование значений.Nokogiri будет помещать ошибки в атрибут errors, когда он не может разобрать что-либо по своему вкусу, поэтому вы можете проверить это там.Посмотрим, что представляет собой DOCTYPE при отправке контента, а также проверим заголовки HTTP и посмотрим, определит ли что-то кодовый набор.

С этой проблемой я сталкивался много раз в Интернете, потому что HTML так плохо написан и так часто не соответствует спецификациям.

...