記号に関してpreg_match_allしてみた

\p{S} : 記号

Target:0aB#1cDあぇカォ亜%ウッ゛〜[SPACE][Full-Width-SPACE][TAB][CR][LF]☆★!”#$%&’()=〜|「」@`{};:+*<>、。?_・¥
Pattern:/\p{S}/msu
Matches:゛☆★$=|`+<>¥

\p{P} : 句読点

Target:0aB#1cDあぇカォ亜%ウッ゛〜[SPACE][Full-Width-SPACE][TAB][CR][LF]☆★!”#$%&’()=〜|「」@`{};:+*<>、。?_・¥
Pattern:/\p{P}/msu
Matches:#%〜!”#%&’()〜「」@{};:*、。?_・

\p{Common} : スペースや句読点

Target:0aB#1cDあぇカォ亜%ウッ゛〜[SPACE][Full-Width-SPACE][TAB][CR][LF]☆★!”#$%&’()=〜|「」@`{};:+*<>、。?_・¥
Pattern:/\p{Common}/msu
Matches:0#1%゛〜[SPACE] [TAB][CR][LF]☆★!”#$%&’()=〜|「」@`{};:+*<>、。?_・¥

記号って難しいですね……。

2008/06/05追記

大まかな動作を知りたかっただけなのでテスト文字列の選別がかなり適当。本当なら全ての記号を洗い出して実験すべき。