2015-10-06 60 views
0

快速Perl問題,希望有一個簡單的答案。我試圖對包含非中斷空格的字符串執行分割( )。這是使用HTML::TreeBuilder::XPath閱讀在html頁面和檢索由$titleString = $tree->findvalue('/html/head/title')在字符實體引用的Perl拆分字符串 

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

你不應該知道如何在文檔中的文本進行編碼。因此,當文檔包含&nbsp;時,findvalue會返回實際的非分隔空格(U + 00A0)。因此,您可以使用

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

太好了。感謝您的解釋。方便知道。 –