Blame
Date:
Mon Jan 3 05:00:26 2022 UTC
Message:
Daily backup
001
2021-12-17
jrmu
<?php if (!defined('PmWiki')) exit();
002
2021-12-17
jrmu
/* Copyright 2005-2019 Patrick R. Michaud (pmichaud@pobox.com)
003
2021-12-17
jrmu
This file is part of PmWiki; you can redistribute it and/or modify
004
2021-12-17
jrmu
it under the terms of the GNU General Public License as published
005
2021-12-17
jrmu
by the Free Software Foundation; either version 2 of the License, or
006
2021-12-17
jrmu
(at your option) any later version. See pmwiki.php for full details.
007
2021-12-17
jrmu
008
2021-12-17
jrmu
This script provides a number of syndication feed and xml-based
009
2021-12-17
jrmu
metadata options to PmWiki, including Atom, RSS 2.0, RSS 1.0 (RDF),
010
2021-12-17
jrmu
and the Dublin Core Metadata extensions. This module is typically
011
2021-12-17
jrmu
activated from a local configuration file via a line such as
012
2021-12-17
jrmu
013
2021-12-17
jrmu
if ($action == 'atom') include_once("$FarmD/scripts/feeds.php");
014
2021-12-17
jrmu
if ($action == 'dc') include_once("$FarmD/scripts/feeds.php");
015
2021-12-17
jrmu
016
2021-12-17
jrmu
When enabled, ?action=atom, ?action=rss, and ?action=rdf produce
017
2021-12-17
jrmu
syndication feeds based on any wikitrail contained in the page,
018
2021-12-17
jrmu
or, for Category pages, on the pages in the category. The feeds
019
2021-12-17
jrmu
are generated using pagelist, thus one can include parameters such
020
2021-12-17
jrmu
as count=, list=, order=, etc. in the url to adjust the feed output.
021
2021-12-17
jrmu
022
2021-12-17
jrmu
?action=dc will normally generate Dublin Core Metadata for the
023
2021-12-17
jrmu
current page only, but placing a group=, trail=, or link= argument
024
2021-12-17
jrmu
in the url causes it to generate metadata for all pages in the
025
2021-12-17
jrmu
associated group, trail, or backlink.
026
2021-12-17
jrmu
027
2021-12-17
jrmu
There are a large number of customizations available, most of which
028
2021-12-17
jrmu
are controlled by the $FeedFmt array. Elements $FeedFmt look like
029
2021-12-17
jrmu
030
2021-12-17
jrmu
$FeedFmt['atom']['feed']['rights'] = 'All Rights Reserved';
031
2021-12-17
jrmu
032
2021-12-17
jrmu
where the first index corresponds to the action (?action=atom),
033
2021-12-17
jrmu
the second index indicates a per-feed or per-item element, and
034
2021-12-17
jrmu
the third index is the name of the element being generated.
035
2021-12-17
jrmu
The above setting would therefore generate a
036
2021-12-17
jrmu
"<rights>All Rights Reserved</rights>" in the feed for
037
2021-12-17
jrmu
?action=atom. If the value of an entry begins with a '<',
038
2021-12-17
jrmu
then feeds.php doesn't automatically add the tag around it.
039
2021-12-17
jrmu
Elements can also be callable functions which are called to
040
2021-12-17
jrmu
generate the appropriate output.
041
2021-12-17
jrmu
042
2021-12-17
jrmu
For example, to set the RSS 2.0 <author> element to the
043
2021-12-17
jrmu
value of the last author to modify a page, one can set
044
2021-12-17
jrmu
(in local/config.php):
045
2021-12-17
jrmu
046
2021-12-17
jrmu
$FeedFmt['rss']['item']['author'] = '$LastModifiedBy';
047
2021-12-17
jrmu
048
2021-12-17
jrmu
To use the RSS 2.0 <description> element to contain the
049
2021-12-17
jrmu
change summary of the most recent edit, set
050
2021-12-17
jrmu
051
2021-12-17
jrmu
$FeedFmt['rss']['item']['description'] = '$LastModifiedSummary';
052
2021-12-17
jrmu
053
2021-12-17
jrmu
Feeds.php can also be combined with attachments to support
054
2021-12-17
jrmu
podcasting via ?action=rss. Any page such as "PageName"
055
2021-12-17
jrmu
that has an mp3 attachment with the same name as the page
056
2021-12-17
jrmu
("PageName.mp3") will have an appropriate <enclosure> element
057
2021-12-17
jrmu
in the feed output. The set of allowed attachments can be
058
2021-12-17
jrmu
extended using the $RSSEnclosureFmt array:
059
2021-12-17
jrmu
060
2021-12-17
jrmu
$RSSEnclosureFmt = array('{$Name}.mp3', '{$Name}.mp4');
061
2021-12-17
jrmu
062
2021-12-17
jrmu
References:
063
2021-12-17
jrmu
http://www.atomenabled.org/developers/syndication/
064
2021-12-17
jrmu
http://dublincore.org/documents/dcmes-xml/
065
2021-12-17
jrmu
http://en.wikipedia.org/wiki/Podcasting
066
2021-12-17
jrmu
067
2021-12-17
jrmu
Script maintained by Petko YOTOV www.pmwiki.org/petko
068
2021-12-17
jrmu
*/
069
2021-12-17
jrmu
070
2021-12-17
jrmu
## Settings for ?action=atom
071
2021-12-17
jrmu
SDVA($FeedFmt['atom']['feed'], array(
072
2021-12-17
jrmu
'_header' => 'Content-type: text/xml; charset="$Charset"',
073
2021-12-17
jrmu
'_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
074
2021-12-17
jrmu
<feed xmlns="http://www.w3.org/2005/Atom">'."\n",
075
2021-12-17
jrmu
'_end' => "</feed>\n",
076
2021-12-17
jrmu
'title' => '$WikiTitle',
077
2021-12-17
jrmu
'link' => '<link rel="self" href="{$PageUrl}?action=atom" />',
078
2021-12-17
jrmu
'id' => '{$PageUrl}?action=atom',
079
2021-12-17
jrmu
'updated' => '$FeedISOTime',
080
2021-12-17
jrmu
'author' => "<author><name>$WikiTitle</name></author>\n",
081
2021-12-17
jrmu
'generator' => '$Version',
082
2021-12-17
jrmu
'logo' => '$PageLogoUrl'));
083
2021-12-17
jrmu
SDVA($FeedFmt['atom']['item'], array(
084
2021-12-17
jrmu
'_start' => "<entry>\n",
085
2021-12-17
jrmu
'id' => '{$PageUrl}',
086
2021-12-17
jrmu
'title' => '{$Title}',
087
2021-12-17
jrmu
'updated' => '$ItemISOTime',
088
2021-12-17
jrmu
'link' => "<link rel=\"alternate\" href=\"{\$PageUrl}\" />\n",
089
2021-12-17
jrmu
'author' => "<author><name>{\$LastModifiedBy}</name></author>\n",
090
2021-12-17
jrmu
'summary' => '{$Description}',
091
2021-12-17
jrmu
'category' => "<category term=\"\$Category\" />\n",
092
2021-12-17
jrmu
'_end' => "</entry>\n"));
093
2021-12-17
jrmu
094
2021-12-17
jrmu
## Settings for ?action=dc
095
2021-12-17
jrmu
SDVA($FeedFmt['dc']['feed'], array(
096
2021-12-17
jrmu
'_header' => 'Content-type: text/xml; charset="$Charset"',
097
2021-12-17
jrmu
'_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
098
2021-12-17
jrmu
<!DOCTYPE rdf:RDF PUBLIC "-//DUBLIN CORE//DCMES DTD 2002/07/31//EN"
099
2021-12-17
jrmu
"http://dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.dtd">
100
2021-12-17
jrmu
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
101
2021-12-17
jrmu
xmlns:dc="http://purl.org/dc/elements/1.1/">'."\n",
102
2021-12-17
jrmu
'_end' => "</rdf:RDF>\n"));
103
2021-12-17
jrmu
SDVA($FeedFmt['dc']['item'], array(
104
2021-12-17
jrmu
'_start' => "<rdf:Description rdf:about=\"{\$PageUrl}\">\n",
105
2021-12-17
jrmu
'dc:title' => '{$Title}',
106
2021-12-17
jrmu
'dc:identifier' => '{$PageUrl}',
107
2021-12-17
jrmu
'dc:date' => '$ItemISOTime',
108
2021-12-17
jrmu
'dc:type' => 'Text',
109
2021-12-17
jrmu
'dc:format' => 'text/html',
110
2021-12-17
jrmu
'dc:description' => '{$Description}',
111
2021-12-17
jrmu
'dc:subject' => "<dc:subject>\$Category</dc:subject>\n",
112
2021-12-17
jrmu
'dc:publisher' => '$WikiTitle',
113
2021-12-17
jrmu
'dc:author' => '{$LastModifiedBy}',
114
2021-12-17
jrmu
'_end' => "</rdf:Description>\n"));
115
2021-12-17
jrmu
116
2021-12-17
jrmu
## RSS 2.0 settings for ?action=rss
117
2021-12-17
jrmu
SDVA($FeedFmt['rss']['feed'], array(
118
2021-12-17
jrmu
'_header' => 'Content-type: text/xml; charset="$Charset"',
119
2021-12-17
jrmu
'_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
120
2021-12-17
jrmu
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
121
2021-12-17
jrmu
<channel>'."\n",
122
2021-12-17
jrmu
'_end' => "</channel>\n</rss>\n",
123
2021-12-17
jrmu
'title' => '$WikiTitle | {$Group} / {$Title}',
124
2021-12-17
jrmu
'link' => '{$PageUrl}?action=rss',
125
2021-12-17
jrmu
'description' => '{$Group}.{$Title}',
126
2021-12-17
jrmu
'lastBuildDate' => '$FeedRSSTime'));
127
2021-12-17
jrmu
SDVA($FeedFmt['rss']['item'], array(
128
2021-12-17
jrmu
'_start' => "<item>\n",
129
2021-12-17
jrmu
'_end' => "</item>\n",
130
2021-12-17
jrmu
'title' => '{$Group} / {$Title}',
131
2021-12-17
jrmu
'link' => '{$PageUrl}',
132
2021-12-17
jrmu
'description' => '{$Description}',
133
2021-12-17
jrmu
'dc:contributor' => '{$LastModifiedBy}',
134
2021-12-17
jrmu
'dc:date' => '$ItemISOTime',
135
2021-12-17
jrmu
'pubDate' => '$ItemRSSTime',
136
2021-12-17
jrmu
'enclosure' => 'RSSEnclosure'));
137
2021-12-17
jrmu
138
2021-12-17
jrmu
## RDF 1.0, for ?action=rdf
139
2021-12-17
jrmu
SDVA($FeedFmt['rdf']['feed'], array(
140
2021-12-17
jrmu
'_header' => 'Content-type: text/xml; charset="$Charset"',
141
2021-12-17
jrmu
'_start' => '<?xml version="1.0" encoding="$Charset"?'.'>
142
2021-12-17
jrmu
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
143
2021-12-17
jrmu
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
144
2021-12-17
jrmu
xmlns:dc="http://purl.org/dc/elements/1.1/">
145
2021-12-17
jrmu
<channel rdf:about="{$PageUrl}?action=rdf">'."\n",
146
2021-12-17
jrmu
'title' => '$WikiTitle | {$Group} / {$Title}',
147
2021-12-17
jrmu
'link' => '{$PageUrl}?action=rdf',
148
2021-12-17
jrmu
'description' => '{$Group}.{$Title}',
149
2021-12-17
jrmu
'dc:date' => '$FeedISOTime',
150
2021-12-17
jrmu
'items' => "<items>\n<rdf:Seq>\n\$FeedRDFSeq</rdf:Seq>\n</items>\n",
151
2021-12-17
jrmu
'_items' => "</channel>\n",
152
2021-12-17
jrmu
'_end' => "</rdf:RDF>\n"));
153
2021-12-17
jrmu
SDVA($FeedFmt['rdf']['item'], array(
154
2021-12-17
jrmu
'_start' => "<item rdf:about=\"{\$PageUrl}\">\n",
155
2021-12-17
jrmu
'_end' => "</item>\n",
156
2021-12-17
jrmu
'title' => '$WikiTitle | {$Group} / {$Title}',
157
2021-12-17
jrmu
'link' => '{$PageUrl}',
158
2021-12-17
jrmu
'description' => '{$Description}',
159
2021-12-17
jrmu
'dc:date' => '$ItemISOTime'));
160
2021-12-17
jrmu
161
2021-12-17
jrmu
foreach(array_keys($FeedFmt) as $k) {
162
2021-12-17
jrmu
SDV($HandleActions[$k], 'HandleFeed');
163
2021-12-17
jrmu
SDV($HandleAuth[$k], 'read');
164
2021-12-17
jrmu
}
165
2021-12-17
jrmu
166
2021-12-17
jrmu
function HandleFeed($pagename, $auth = 'read') {
167
2021-12-17
jrmu
global $FeedFmt, $action, $PCache, $FmtV, $TimeISOZFmt, $RSSTimeFmt,
168
2021-12-17
jrmu
$FeedPageListOpt, $FeedCategoryOpt, $FeedTrailOpt,
169
2021-12-17
jrmu
$FeedDescPatterns, $CategoryGroup, $EntitiesTable;
170
2021-12-17
jrmu
SDV($RSSTimeFmt, 'D, d M Y H:i:s \G\M\T');
171
2021-12-17
jrmu
SDV($FeedDescPatterns,
172
2021-12-17
jrmu
array('/<[^>]*$/' => ' ', '/\\w+$/' => '', '/<[^>]+>/' => ''));
173
2021-12-17
jrmu
$FeedPageListOpt = (array)@$FeedPageListOpt;
174
2021-12-17
jrmu
SDVA($FeedCategoryOpt, array('link' => $pagename));
175
2021-12-17
jrmu
SDVA($FeedTrailOpt, array('trail' => $pagename, 'count' => 10));
176
2021-12-17
jrmu
177
2021-12-17
jrmu
$f = $FeedFmt[$action];
178
2021-12-17
jrmu
$page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
179
2021-12-17
jrmu
if (!$page) Abort("?cannot generate feed");
180
2021-12-17
jrmu
$feedtime = $page['time'];
181
2021-12-17
jrmu
182
2021-12-17
jrmu
# determine list of pages to display
183
2021-12-17
jrmu
if (@($_REQUEST['trail'] || $_REQUEST['group'] || $_REQUEST['link']
184
2021-12-17
jrmu
|| $_REQUEST['name']))
185
2021-12-17
jrmu
$opt = $FeedPageListOpt;
186
2021-12-17
jrmu
else if (preg_match("/^$CategoryGroup\\./", $pagename))
187
2021-12-17
jrmu
$opt = $FeedCategoryOpt;
188
2021-12-17
jrmu
else if ($action != 'dc') $opt = $FeedTrailOpt;
189
2021-12-17
jrmu
else {
190
2021-12-17
jrmu
PCache($pagename, $page);
191
2021-12-17
jrmu
$pagelist = array($pagename);
192
2021-12-17
jrmu
}
193
2021-12-17
jrmu
if (!@$pagelist) {
194
2021-12-17
jrmu
$opt = array_merge($opt, @$_REQUEST);
195
2021-12-17
jrmu
$pagelist = MakePageList($pagename, $opt, 0);
196
2021-12-17
jrmu
}
197
2021-12-17
jrmu
198
2021-12-17
jrmu
# process list of pages in feed
199
2021-12-17
jrmu
$rdfseq = '';
200
2021-12-17
jrmu
$pl = array();
201
2021-12-17
jrmu
foreach($pagelist as $pn) {
202
2021-12-17
jrmu
if (!PageExists($pn)) continue;
203
2021-12-17
jrmu
if (!isset($PCache[$pn]['time']))
204
2021-12-17
jrmu
{ $page = ReadPage($pn, READPAGE_CURRENT); PCache($pn, $page); }
205
2021-12-17
jrmu
$pc = & $PCache[$pn];
206
2021-12-17
jrmu
$pl[] = $pn;
207
2021-12-17
jrmu
$rdfseq .= FmtPageName("<rdf:li resource=\"{\$PageUrl}\" />\n", $pn);
208
2021-12-17
jrmu
if ($pc['time'] > $feedtime) $feedtime = $pc['time'];
209
2021-12-17
jrmu
if (@$opt['count'] && count($pl) >= $opt['count']) break;
210
2021-12-17
jrmu
}
211
2021-12-17
jrmu
$pagelist = $pl;
212
2021-12-17
jrmu
213
2021-12-17
jrmu
$FmtV['$FeedRDFSeq'] = $rdfseq;
214
2021-12-17
jrmu
$FmtV['$FeedISOTime'] = gmstrftime($TimeISOZFmt, $feedtime);
215
2021-12-17
jrmu
$FmtV['$FeedRSSTime'] = gmdate($RSSTimeFmt, $feedtime);
216
2021-12-17
jrmu
# format start of feed
217
2021-12-17
jrmu
$out = FmtPageName($f['feed']['_start'], $pagename);
218
2021-12-17
jrmu
219
2021-12-17
jrmu
# format feed elements
220
2021-12-17
jrmu
foreach($f['feed'] as $k => $v) {
221
2021-12-17
jrmu
if ($k[0] == '_' || !$v) continue;
222
2021-12-17
jrmu
$x = FmtPageName($v, $pagename);
223
2021-12-17
jrmu
if (!$x) continue;
224
2021-12-17
jrmu
$out .= ($v[0] == '<') ? $x : "<$k>$x</$k>\n";
225
2021-12-17
jrmu
}
226
2021-12-17
jrmu
227
2021-12-17
jrmu
# format items in feed
228
2021-12-17
jrmu
if (@$f['feed']['_items'])
229
2021-12-17
jrmu
$out .= FmtPageName($f['feed']['_items'], $pagename);
230
2021-12-17
jrmu
foreach($pagelist as $pn) {
231
2021-12-17
jrmu
$page = &$PCache[$pn];
232
2021-12-17
jrmu
$FmtV['$ItemDesc'] = @$page['description'];
233
2021-12-17
jrmu
$FmtV['$ItemISOTime'] = gmstrftime($TimeISOZFmt, $page['time']);
234
2021-12-17
jrmu
$FmtV['$ItemRSSTime'] = gmdate($RSSTimeFmt, $page['time']);
235
2021-12-17
jrmu
236
2021-12-17
jrmu
$out .= FmtPageName($f['item']['_start'], $pn);
237
2021-12-17
jrmu
foreach((array)@$f['item'] as $k => $v) {
238
2021-12-17
jrmu
if ($k[0] == '_' || !$v) continue;
239
2021-12-17
jrmu
if (is_callable($v)) { $out .= $v($pn, $page, $k); continue; }
240
2021-12-17
jrmu
if (strpos($v, '$LastModifiedBy') !== false && !@$page['author'])
241
2021-12-17
jrmu
continue;
242
2021-12-17
jrmu
if (strpos($v, '$Category') !== false) {
243
2021-12-17
jrmu
if (preg_match_all("/(?<=^|,)$CategoryGroup\\.([^,]+)/",
244
2021-12-17
jrmu
@$page['targets'], $match)) {
245
2021-12-17
jrmu
foreach($match[1] as $c) {
246
2021-12-17
jrmu
$FmtV['$Category'] = $c;
247
2021-12-17
jrmu
$out .= FmtPageName($v, $pn);
248
2021-12-17
jrmu
}
249
2021-12-17
jrmu
}
250
2021-12-17
jrmu
continue;
251
2021-12-17
jrmu
}
252
2021-12-17
jrmu
$x = FmtPageName($v, $pn);
253
2021-12-17
jrmu
if (!$x) continue;
254
2021-12-17
jrmu
$out .= ($v[0] == '<') ? $x : "<$k>$x</$k>\n";
255
2021-12-17
jrmu
}
256
2021-12-17
jrmu
$out .= FmtPageName($f['item']['_end'], $pn);
257
2021-12-17
jrmu
}
258
2021-12-17
jrmu
$out .= FmtPageName($f['feed']['_end'], $pagename);
259
2021-12-17
jrmu
foreach((array)@$f['feed']['_header'] as $fmt)
260
2021-12-17
jrmu
header(FmtPageName($fmt, $pagename));
261
2021-12-17
jrmu
print str_replace(array_keys($EntitiesTable),
262
2021-12-17
jrmu
array_values($EntitiesTable), $out);
263
2021-12-17
jrmu
}
264
2021-12-17
jrmu
265
2021-12-17
jrmu
## RSSEnclosure is called in ?action=rss to generate <enclosure>
266
2021-12-17
jrmu
## tags for any pages that have an attached "PageName.mp3" file.
267
2021-12-17
jrmu
## The set of attachments to enclose is given by $RSSEnclosureFmt.
268
2021-12-17
jrmu
function RSSEnclosure($pagename, &$page, $k) {
269
2021-12-17
jrmu
global $RSSEnclosureFmt, $UploadFileFmt, $UploadExts;
270
2021-12-17
jrmu
if (!function_exists('MakeUploadName')) return '';
271
2021-12-17
jrmu
SDV($RSSEnclosureFmt, array('{$Name}.mp3'));
272
2021-12-17
jrmu
$encl = '';
273
2021-12-17
jrmu
foreach((array)$RSSEnclosureFmt as $fmt) {
274
2021-12-17
jrmu
$path = FmtPageName($fmt, $pagename);
275
2021-12-17
jrmu
$upname = MakeUploadName($pagename, $path);
276
2021-12-17
jrmu
$filepath = FmtPageName("$UploadFileFmt/$upname", $pagename);
277
2021-12-17
jrmu
if (file_exists($filepath)) {
278
2021-12-17
jrmu
$length = filesize($filepath);
279
2021-12-17
jrmu
$type = @$UploadExts[preg_replace('/.*\\./', '', $filepath)];
280
2021-12-17
jrmu
$url = LinkUpload($pagename, 'Attach:', $path, '', '', '$LinkUrl');
281
2021-12-17
jrmu
$encl .= "<$k url='$url' length='$length' type='$type' />";
282
2021-12-17
jrmu
}
283
2021-12-17
jrmu
}
284
2021-12-17
jrmu
return $encl;
285
2021-12-17
jrmu
}
286
2021-12-17
jrmu
287
2021-12-17
jrmu
## Since most feeds don't understand html character entities, we
288
2021-12-17
jrmu
## convert the common ones to their numeric form here.
289
2021-12-17
jrmu
SDVA($EntitiesTable, array(
290
2021-12-17
jrmu
# entities defined in "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"
291
2021-12-17
jrmu
'&nbsp;' => '&#160;',
292
2021-12-17
jrmu
'&iexcl;' => '&#161;',
293
2021-12-17
jrmu
'&cent;' => '&#162;',
294
2021-12-17
jrmu
'&pound;' => '&#163;',
295
2021-12-17
jrmu
'&curren;' => '&#164;',
296
2021-12-17
jrmu
'&yen;' => '&#165;',
297
2021-12-17
jrmu
'&brvbar;' => '&#166;',
298
2021-12-17
jrmu
'&sect;' => '&#167;',
299
2021-12-17
jrmu
'&uml;' => '&#168;',
300
2021-12-17
jrmu
'&copy;' => '&#169;',
301
2021-12-17
jrmu
'&ordf;' => '&#170;',
302
2021-12-17
jrmu
'&laquo;' => '&#171;',
303
2021-12-17
jrmu
'&not;' => '&#172;',
304
2021-12-17
jrmu
'&shy;' => '&#173;',
305
2021-12-17
jrmu
'&reg;' => '&#174;',
306
2021-12-17
jrmu
'&macr;' => '&#175;',
307
2021-12-17
jrmu
'&deg;' => '&#176;',
308
2021-12-17
jrmu
'&plusmn;' => '&#177;',
309
2021-12-17
jrmu
'&sup2;' => '&#178;',
310
2021-12-17
jrmu
'&sup3;' => '&#179;',
311
2021-12-17
jrmu
'&acute;' => '&#180;',
312
2021-12-17
jrmu
'&micro;' => '&#181;',
313
2021-12-17
jrmu
'&para;' => '&#182;',
314
2021-12-17
jrmu
'&middot;' => '&#183;',
315
2021-12-17
jrmu
'&cedil;' => '&#184;',
316
2021-12-17
jrmu
'&sup1;' => '&#185;',
317
2021-12-17
jrmu
'&ordm;' => '&#186;',
318
2021-12-17
jrmu
'&raquo;' => '&#187;',
319
2021-12-17
jrmu
'&frac14;' => '&#188;',
320
2021-12-17
jrmu
'&frac12;' => '&#189;',
321
2021-12-17
jrmu
'&frac34;' => '&#190;',
322
2021-12-17
jrmu
'&iquest;' => '&#191;',
323
2021-12-17
jrmu
'&Agrave;' => '&#192;',
324
2021-12-17
jrmu
'&Aacute;' => '&#193;',
325
2021-12-17
jrmu
'&Acirc;' => '&#194;',
326
2021-12-17
jrmu
'&Atilde;' => '&#195;',
327
2021-12-17
jrmu
'&Auml;' => '&#196;',
328
2021-12-17
jrmu
'&Aring;' => '&#197;',
329
2021-12-17
jrmu
'&AElig;' => '&#198;',
330
2021-12-17
jrmu
'&Ccedil;' => '&#199;',
331
2021-12-17
jrmu
'&Egrave;' => '&#200;',
332
2021-12-17
jrmu
'&Eacute;' => '&#201;',
333
2021-12-17
jrmu
'&Ecirc;' => '&#202;',
334
2021-12-17
jrmu
'&Euml;' => '&#203;',
335
2021-12-17
jrmu
'&Igrave;' => '&#204;',
336
2021-12-17
jrmu
'&Iacute;' => '&#205;',
337
2021-12-17
jrmu
'&Icirc;' => '&#206;',
338
2021-12-17
jrmu
'&Iuml;' => '&#207;',
339
2021-12-17
jrmu
'&ETH;' => '&#208;',
340
2021-12-17
jrmu
'&Ntilde;' => '&#209;',
341
2021-12-17
jrmu
'&Ograve;' => '&#210;',
342
2021-12-17
jrmu
'&Oacute;' => '&#211;',
343
2021-12-17
jrmu
'&Ocirc;' => '&#212;',
344
2021-12-17
jrmu
'&Otilde;' => '&#213;',
345
2021-12-17
jrmu
'&Ouml;' => '&#214;',
346
2021-12-17
jrmu
'&times;' => '&#215;',
347
2021-12-17
jrmu
'&Oslash;' => '&#216;',
348
2021-12-17
jrmu
'&Ugrave;' => '&#217;',
349
2021-12-17
jrmu
'&Uacute;' => '&#218;',
350
2021-12-17
jrmu
'&Ucirc;' => '&#219;',
351
2021-12-17
jrmu
'&Uuml;' => '&#220;',
352
2021-12-17
jrmu
'&Yacute;' => '&#221;',
353
2021-12-17
jrmu
'&THORN;' => '&#222;',
354
2021-12-17
jrmu
'&szlig;' => '&#223;',
355
2021-12-17
jrmu
'&agrave;' => '&#224;',
356
2021-12-17
jrmu
'&aacute;' => '&#225;',
357
2021-12-17
jrmu
'&acirc;' => '&#226;',
358
2021-12-17
jrmu
'&atilde;' => '&#227;',
359
2021-12-17
jrmu
'&auml;' => '&#228;',
360
2021-12-17
jrmu
'&aring;' => '&#229;',
361
2021-12-17
jrmu
'&aelig;' => '&#230;',
362
2021-12-17
jrmu
'&ccedil;' => '&#231;',
363
2021-12-17
jrmu
'&egrave;' => '&#232;',
364
2021-12-17
jrmu
'&eacute;' => '&#233;',
365
2021-12-17
jrmu
'&ecirc;' => '&#234;',
366
2021-12-17
jrmu
'&euml;' => '&#235;',
367
2021-12-17
jrmu
'&igrave;' => '&#236;',
368
2021-12-17
jrmu
'&iacute;' => '&#237;',
369
2021-12-17
jrmu
'&icirc;' => '&#238;',
370
2021-12-17
jrmu
'&iuml;' => '&#239;',
371
2021-12-17
jrmu
'&eth;' => '&#240;',
372
2021-12-17
jrmu
'&ntilde;' => '&#241;',
373
2021-12-17
jrmu
'&ograve;' => '&#242;',
374
2021-12-17
jrmu
'&oacute;' => '&#243;',
375
2021-12-17
jrmu
'&ocirc;' => '&#244;',
376
2021-12-17
jrmu
'&otilde;' => '&#245;',
377
2021-12-17
jrmu
'&ouml;' => '&#246;',
378
2021-12-17
jrmu
'&divide;' => '&#247;',
379
2021-12-17
jrmu
'&oslash;' => '&#248;',
380
2021-12-17
jrmu
'&ugrave;' => '&#249;',
381
2021-12-17
jrmu
'&uacute;' => '&#250;',
382
2021-12-17
jrmu
'&ucirc;' => '&#251;',
383
2021-12-17
jrmu
'&uuml;' => '&#252;',
384
2021-12-17
jrmu
'&yacute;' => '&#253;',
385
2021-12-17
jrmu
'&thorn;' => '&#254;',
386
2021-12-17
jrmu
'&yuml;' => '&#255;',
387
2021-12-17
jrmu
# entities defined in "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"
388
2021-12-17
jrmu
'&quot;' => '&#34;',
389
2021-12-17
jrmu
#'&amp;' => '&#38;#38;',
390
2021-12-17
jrmu
#'&lt;' => '&#38;#60;',
391
2021-12-17
jrmu
#'&gt;' => '&#62;',
392
2021-12-17
jrmu
'&apos;' => '&#39;',
393
2021-12-17
jrmu
'&OElig;' => '&#338;',
394
2021-12-17
jrmu
'&oelig;' => '&#339;',
395
2021-12-17
jrmu
'&Scaron;' => '&#352;',
396
2021-12-17
jrmu
'&scaron;' => '&#353;',
397
2021-12-17
jrmu
'&Yuml;' => '&#376;',
398
2021-12-17
jrmu
'&circ;' => '&#710;',
399
2021-12-17
jrmu
'&tilde;' => '&#732;',
400
2021-12-17
jrmu
'&ensp;' => '&#8194;',
401
2021-12-17
jrmu
'&emsp;' => '&#8195;',
402
2021-12-17
jrmu
'&thinsp;' => '&#8201;',
403
2021-12-17
jrmu
'&zwnj;' => '&#8204;',
404
2021-12-17
jrmu
'&zwj;' => '&#8205;',
405
2021-12-17
jrmu
'&lrm;' => '&#8206;',
406
2021-12-17
jrmu
'&rlm;' => '&#8207;',
407
2021-12-17
jrmu
'&ndash;' => '&#8211;',
408
2021-12-17
jrmu
'&mdash;' => '&#8212;',
409
2021-12-17
jrmu
'&lsquo;' => '&#8216;',
410
2021-12-17
jrmu
'&rsquo;' => '&#8217;',
411
2021-12-17
jrmu
'&sbquo;' => '&#8218;',
412
2021-12-17
jrmu
'&ldquo;' => '&#8220;',
413
2021-12-17
jrmu
'&rdquo;' => '&#8221;',
414
2021-12-17
jrmu
'&bdquo;' => '&#8222;',
415
2021-12-17
jrmu
'&dagger;' => '&#8224;',
416
2021-12-17
jrmu
'&Dagger;' => '&#8225;',
417
2021-12-17
jrmu
'&permil;' => '&#8240;',
418
2021-12-17
jrmu
'&lsaquo;' => '&#8249;',
419
2021-12-17
jrmu
'&rsaquo;' => '&#8250;',
420
2021-12-17
jrmu
'&euro;' => '&#8364;',
421
2021-12-17
jrmu
# entities defined in "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"
422
2021-12-17
jrmu
'&fnof;' => '&#402;',
423
2021-12-17
jrmu
'&Alpha;' => '&#913;',
424
2021-12-17
jrmu
'&Beta;' => '&#914;',
425
2021-12-17
jrmu
'&Gamma;' => '&#915;',
426
2021-12-17
jrmu
'&Delta;' => '&#916;',
427
2021-12-17
jrmu
'&Epsilon;' => '&#917;',
428
2021-12-17
jrmu
'&Zeta;' => '&#918;',
429
2021-12-17
jrmu
'&Eta;' => '&#919;',
430
2021-12-17
jrmu
'&Theta;' => '&#920;',
431
2021-12-17
jrmu
'&Iota;' => '&#921;',
432
2021-12-17
jrmu
'&Kappa;' => '&#922;',
433
2021-12-17
jrmu
'&Lambda;' => '&#923;',
434
2021-12-17
jrmu
'&Mu;' => '&#924;',
435
2021-12-17
jrmu
'&Nu;' => '&#925;',
436
2021-12-17
jrmu
'&Xi;' => '&#926;',
437
2021-12-17
jrmu
'&Omicron;' => '&#927;',
438
2021-12-17
jrmu
'&Pi;' => '&#928;',
439
2021-12-17
jrmu
'&Rho;' => '&#929;',
440
2021-12-17
jrmu
'&Sigma;' => '&#931;',
441
2021-12-17
jrmu
'&Tau;' => '&#932;',
442
2021-12-17
jrmu
'&Upsilon;' => '&#933;',
443
2021-12-17
jrmu
'&Phi;' => '&#934;',
444
2021-12-17
jrmu
'&Chi;' => '&#935;',
445
2021-12-17
jrmu
'&Psi;' => '&#936;',
446
2021-12-17
jrmu
'&Omega;' => '&#937;',
447
2021-12-17
jrmu
'&alpha;' => '&#945;',
448
2021-12-17
jrmu
'&beta;' => '&#946;',
449
2021-12-17
jrmu
'&gamma;' => '&#947;',
450
2021-12-17
jrmu
'&delta;' => '&#948;',
451
2021-12-17
jrmu
'&epsilon;' => '&#949;',
452
2021-12-17
jrmu
'&zeta;' => '&#950;',
453
2021-12-17
jrmu
'&eta;' => '&#951;',
454
2021-12-17
jrmu
'&theta;' => '&#952;',
455
2021-12-17
jrmu
'&iota;' => '&#953;',
456
2021-12-17
jrmu
'&kappa;' => '&#954;',
457
2021-12-17
jrmu
'&lambda;' => '&#955;',
458
2021-12-17
jrmu
'&mu;' => '&#956;',
459
2021-12-17
jrmu
'&nu;' => '&#957;',
460
2021-12-17
jrmu
'&xi;' => '&#958;',
461
2021-12-17
jrmu
'&omicron;' => '&#959;',
462
2021-12-17
jrmu
'&pi;' => '&#960;',
463
2021-12-17
jrmu
'&rho;' => '&#961;',
464
2021-12-17
jrmu
'&sigmaf;' => '&#962;',
465
2021-12-17
jrmu
'&sigma;' => '&#963;',
466
2021-12-17
jrmu
'&tau;' => '&#964;',
467
2021-12-17
jrmu
'&upsilon;' => '&#965;',
468
2021-12-17
jrmu
'&phi;' => '&#966;',
469
2021-12-17
jrmu
'&chi;' => '&#967;',
470
2021-12-17
jrmu
'&psi;' => '&#968;',
471
2021-12-17
jrmu
'&omega;' => '&#969;',
472
2021-12-17
jrmu
'&thetasym;' => '&#977;',
473
2021-12-17
jrmu
'&upsih;' => '&#978;',
474
2021-12-17
jrmu
'&piv;' => '&#982;',
475
2021-12-17
jrmu
'&bull;' => '&#8226;',
476
2021-12-17
jrmu
'&hellip;' => '&#8230;',
477
2021-12-17
jrmu
'&prime;' => '&#8242;',
478
2021-12-17
jrmu
'&Prime;' => '&#8243;',
479
2021-12-17
jrmu
'&oline;' => '&#8254;',
480
2021-12-17
jrmu
'&frasl;' => '&#8260;',
481
2021-12-17
jrmu
'&weierp;' => '&#8472;',
482
2021-12-17
jrmu
'&image;' => '&#8465;',
483
2021-12-17
jrmu
'&real;' => '&#8476;',
484
2021-12-17
jrmu
'&trade;' => '&#8482;',
485
2021-12-17
jrmu
'&alefsym;' => '&#8501;',
486
2021-12-17
jrmu
'&larr;' => '&#8592;',
487
2021-12-17
jrmu
'&uarr;' => '&#8593;',
488
2021-12-17
jrmu
'&rarr;' => '&#8594;',
489
2021-12-17
jrmu
'&darr;' => '&#8595;',
490
2021-12-17
jrmu
'&harr;' => '&#8596;',
491
2021-12-17
jrmu
'&crarr;' => '&#8629;',
492
2021-12-17
jrmu
'&lArr;' => '&#8656;',
493
2021-12-17
jrmu
'&uArr;' => '&#8657;',
494
2021-12-17
jrmu
'&rArr;' => '&#8658;',
495
2021-12-17
jrmu
'&dArr;' => '&#8659;',
496
2021-12-17
jrmu
'&hArr;' => '&#8660;',
497
2021-12-17
jrmu
'&forall;' => '&#8704;',
498
2021-12-17
jrmu
'&part;' => '&#8706;',
499
2021-12-17
jrmu
'&exist;' => '&#8707;',
500
2021-12-17
jrmu
'&empty;' => '&#8709;',
501
2021-12-17
jrmu
'&nabla;' => '&#8711;',
502
2021-12-17
jrmu
'&isin;' => '&#8712;',
503
2021-12-17
jrmu
'&notin;' => '&#8713;',
504
2021-12-17
jrmu
'&ni;' => '&#8715;',
505
2021-12-17
jrmu
'&prod;' => '&#8719;',
506
2021-12-17
jrmu
'&sum;' => '&#8721;',
507
2021-12-17
jrmu
'&minus;' => '&#8722;',
508
2021-12-17
jrmu
'&lowast;' => '&#8727;',
509
2021-12-17
jrmu
'&radic;' => '&#8730;',
510
2021-12-17
jrmu
'&prop;' => '&#8733;',
511
2021-12-17
jrmu
'&infin;' => '&#8734;',
512
2021-12-17
jrmu
'&ang;' => '&#8736;',
513
2021-12-17
jrmu
'&and;' => '&#8743;',
514
2021-12-17
jrmu
'&or;' => '&#8744;',
515
2021-12-17
jrmu
'&cap;' => '&#8745;',
516
2021-12-17
jrmu
'&cup;' => '&#8746;',
517
2021-12-17
jrmu
'&int;' => '&#8747;',
518
2021-12-17
jrmu
'&there4;' => '&#8756;',
519
2021-12-17
jrmu
'&sim;' => '&#8764;',
520
2021-12-17
jrmu
'&cong;' => '&#8773;',
521
2021-12-17
jrmu
'&asymp;' => '&#8776;',
522
2021-12-17
jrmu
'&ne;' => '&#8800;',
523
2021-12-17
jrmu
'&equiv;' => '&#8801;',
524
2021-12-17
jrmu
'&le;' => '&#8804;',
525
2021-12-17
jrmu
'&ge;' => '&#8805;',
526
2021-12-17
jrmu
'&sub;' => '&#8834;',
527
2021-12-17
jrmu
'&sup;' => '&#8835;',
528
2021-12-17
jrmu
'&nsub;' => '&#8836;',
529
2021-12-17
jrmu
'&sube;' => '&#8838;',
530
2021-12-17
jrmu
'&supe;' => '&#8839;',
531
2021-12-17
jrmu
'&oplus;' => '&#8853;',
532
2021-12-17
jrmu
'&otimes;' => '&#8855;',
533
2021-12-17
jrmu
'&perp;' => '&#8869;',
534
2021-12-17
jrmu
'&sdot;' => '&#8901;',
535
2021-12-17
jrmu
'&lceil;' => '&#8968;',
536
2021-12-17
jrmu
'&rceil;' => '&#8969;',
537
2021-12-17
jrmu
'&lfloor;' => '&#8970;',
538
2021-12-17
jrmu
'&rfloor;' => '&#8971;',
539
2021-12-17
jrmu
'&lang;' => '&#9001;',
540
2021-12-17
jrmu
'&rang;' => '&#9002;',
541
2021-12-17
jrmu
'&loz;' => '&#9674;',
542
2021-12-17
jrmu
'&spades;' => '&#9824;',
543
2021-12-17
jrmu
'&clubs;' => '&#9827;',
544
2021-12-17
jrmu
'&hearts;' => '&#9829;',
545
2021-12-17
jrmu
'&diams;' => '&#9830;'));
546
2021-12-17
jrmu
IRCNow