2015-10-06 6 views
0

Быстрый вопрос в Perl, надеюсь, простой ответ. Я пытаюсь выполнить разбиение на строку, содержащую неперерывные пробелы ( ). Это после прочтения в html страницы с помощью HTML::TreeBuilder::XPath и извлечения строки, необходимой $titleString = $tree->findvalue('/html/head/title')Perl split string для ссылки на символ лица  

use HTML::TreeBuilder::XPath; 
$tree = HTML::TreeBuilder::XPath->new; 
$tree->parse_file("filename"); 
$titleString = $tree->findvalue('/html/head/title'); 
print "$titleString\n"; 

вставленного ниже исходная строка и ниже, что строка, которая должна быть распечатана:

Mr Dan Perkins (Active) 
Mr?Dan Perkins?(Active) 

Я пробовал расщепление $titleString с @parts = split('\?',$titleString);, а также с оригиналом nbsp, хотя и не работали. Моя догадка заключается в том, что есть простой код кодирования, который нужно добавить где-нибудь?

HTML код:

<html> 
<head> 
<title>Dan&nbsp;Perkins&nbsp;(Active)</title> 
</head> 
</html> 
+1

Это '' nbsp'' или ' '? Это разные. Можете ли вы добавить оригинальный веб-сайт, или он является локальным? – simbabque

+0

Извините, это локальная страница html, но я добавлю html к вопросу. Это ' ' - извините, не видел этого. –

ответ

2

Вы не должны знать, как текст в документе закодирована. Таким образом, findvalue возвращает фактическое неразрывное пространство (U + 00A0), когда документ содержит &nbsp;. Таким образом, вы использовали бы

split(/\xA0/, $title_string) 
    -or- 
split(/\x{00A0}/, $title_string) 
    -or- 
split(/\N{U+00A0}/, $title_string) 
    -or- 
split(/\N{NBSP}/, $title_string) 
    -or- 
split(/\N{NO-BREAK SPACE}/, $title_string) 
+0

Пятно на. Так что кодировка символов там? Большое спасибо. –

+0

NBSP - U + 00A0. Вы можете поместить фактический NBSP внутри шаблона, но это будет невозможно прочитать. Лучше всего использовать побег, как показано. – ikegami

+0

Отлично. Спасибо за объяснение. Полезно знать. –