1 2/** 3* Note: This file may contain artifacts of previous malicious infection. 4* However, the dangerous code has been removed, and the file is now safe to use. 5*/ 6 7/** 8 * @file 9 * Pathologic text filter for Drupal. 10 * 11 * This input filter attempts to make sure that link and image paths will 12 * always be correct, even when domain names change, content is moved from one 13 * server to another, the Clean URLs feature is toggled, etc. 14 */ 15 16/** 17 * Implements hook_filter_info(). 18 */ 19function pathologic_filter_info() { 20 return array( 21 'pathologic' => array( 22 'title' => t('Correct URLs with Pathologic'), 23 'process callback' => '_pathologic_filter', 24 'settings callback' => '_pathologic_settings', 25 'default settings' => array( 26 'local_paths' => '', 27 'protocol_style' => 'full', 28 ), 29 // Set weight to 50 so that it will hopefully appear at the bottom of 30 // filter lists by default. 50 is the maximum value of the weight menu 31 // for each row in the filter table (the menu is hidden by JavaScript to 32 // use table row dragging instead when JS is enabled). 33 'weight' => 50, 34 ) 35 ); 36} 37 38/** 39 * Settings callback for Pathologic. 40 */ 41function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { 42 return array( 43 'reminder' => array( 44 '#type' => 'item', 45 '#title' => t('In most cases, Pathologic should be the <em>last</em> filter in the “Filter processing order” list.'), 46 '#weight' => -10, 47 ), 48 'protocol_style' => array( 49 '#type' => 'radios', 50 '#title' => t('Processed URL format'), 51 '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], 52 '#options' => array( 53 'full' => t('Full URL (<code>http://example.com/foo/bar</code>)'), 54 'proto-rel' => t('Protocol relative URL (<code>//example.com/foo/bar</code>)'), 55 'path' => t('Path relative to server root (<code>/foo/bar</code>)'), 56 ), 57 '#description' => t('The <em>Full URL</em> option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the <em>Protocol relative URL</em> option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The <em>Path relative to server root</em> option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), 58 '#weight' => 10, 59 ), 60 'local_paths' => array( 61 '#type' => 'textarea', 62 '#title' => t('All base paths for this site'), 63 '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], 64 '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at <code>http://example.com/</code> but has a staging version at <code>http://dev.example.org/staging/</code>, you would enter both those URLs here. If confused, please read <a href="!docs">Pathologic’s documentation</a> for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), 65 '#weight' => 20, 66 ), 67 ); 68} 69 70/** 71 * Pathologic filter callback. 72 * 73 * Previous versions of this module worked (or, rather, failed) under the 74 * assumption that $langcode contained the language code of the node. Sadly, 75 * this isn't the case. 76 * @see http://drupal.org/node/1812264 77 * However, it turns out that the language of the current node isn't as 78 * important as the language of the node we're linking to, and even then only 79 * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE 80 * FUTURE, ALBRIGHT. 81 * 82 * The below code uses the @ operator before parse_url() calls because in PHP 83 * 5.3.2 and earlier, parse_url() causes a warning of parsing fails. The @ 84 * operator is usually a pretty strong indicator of code smell, but please don't 85 * judge me by it in this case; ordinarily, I despise its use, but I can't find 86 * a cleaner way to avoid this problem (using set_error_handler() could work, 87 * but I wouldn't call that "cleaner"). Fortunately, Drupal 8 will require at 88 * least PHP 5.3.5, so this mess doesn't have to spread into the D8 branch of 89 * Pathologic. 90 * @see https://drupal.org/node/2104849 91 * 92 * @todo Can we do the parsing of the local path settings somehow when the 93 * settings form is submitted instead of doing it here? 94 */ 95function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { 96 // Get the base URL and explode it into component parts. We add these parts 97 // to the exploded local paths settings later. 98 global $base_url; 99 $base_url_parts = @parse_url($base_url . '/'); 100 // Since we have to do some gnarly processing even before we do the *really* 101 // gnarly processing, let's static save the settings - it'll speed things up 102 // if, for example, we're importing many nodes, and not slow things down too 103 // much if it's just a one-off. But since different input formats will have 104 // different settings, we build an array of settings, keyed by format ID. 105 $cached_settings = &drupal_static(__FUNCTION__, array()); 106 if (!isset($cached_settings[$filter->format])) { 107 $filter->settings['local_paths_exploded'] = array(); 108 if ($filter->settings['local_paths'] !== '') { 109 // Build an array of the exploded local paths for this format's settings. 110 // array_filter() below is filtering out items from the array which equal 111 // FALSE - so empty strings (which were causing problems. 112 // @see http://drupal.org/node/1727492 113 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); 114 foreach ($local_paths as $local) { 115 $parts = @parse_url($local); 116 // Okay, what the hellish "if" statement is doing below is checking to 117 // make sure we aren't about to add a path to our array of exploded 118 // local paths which matches the current "local" path. We consider it 119 // not a match, if⦠120 // @todo: This is pretty horrible. Can this be simplified? 121 if ( 122 ( 123 // If this URI has a host, and⦠124 isset($parts['host']) && 125 ( 126 // Either the host is different from the current host⦠127 $parts['host'] !== $base_url_parts['host'] 128 // Or, if the hosts are the same, but the paths are different⦠129 // @see http://drupal.org/node/1875406 130 || ( 131 // Noobs (like me): "xor" means "true if one or the other are 132 // true, but not both." 133 (isset($parts['path']) xor isset($base_url_parts['path'])) 134 || (isset($parts['path']) && isset($base_url_parts['path']) && $parts['path'] !== $base_url_parts['path']) 135 ) 136 ) 137 ) || 138 // Or⦠139 ( 140 // The URI doesn't have a host⦠141 !isset($parts['host']) 142 ) && 143 // And the path parts don't match (if either doesn't have a path 144 // part, they can't match)⦠145 ( 146 !isset($parts['path']) || 147 !isset($base_url_parts['path']) || 148 $parts['path'] !== $base_url_parts['path'] 149 ) 150 ) { 151 // Add it to the list. 152 $filter->settings['local_paths_exploded'][] = $parts; 153 } 154 } 155 } 156 // Now add local paths based on "this" server URL. 157 $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); 158 $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); 159 // We'll also just store the host part separately for easy access. 160 $filter->settings['base_url_host'] = $base_url_parts['host']; 161
162 $cached_settings[$filter->format] = $filter->settings; 163 } 164 // Get the language code for the text we're about to process. 165 $cached_settings['langcode'] = $langcode; 166 // And also take note of which settings in the settings array should apply. 167 $cached_settings['current_settings'] = &$cached_settings[$filter->format]; 168 169 // Now that we have all of our settings prepared, attempt to process all 170 // paths in href, src, action or longdesc HTML attributes. The pattern below 171 // is not perfect, but the callback will do more checking to make sure the 172 // paths it receives make sense to operate upon, and just return the original 173 // paths if not. 174 return preg_replace_callback('~ (href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); 175} 176 177/** 178 * Process and replace paths. preg_replace_callback() callback. 179 */ 180function _pathologic_replace($matches) { 181 // Get the base path. 182 global $base_path; 183 184 // Get the settings for the filter. Since we can't pass extra parameters 185 // through to a callback called by preg_replace_callback(), there's basically 186 // three ways to do this that I can determine: use eval() and friends; abuse 187 // globals; or abuse drupal_static(). The latter is the least offensive, I 188 // guess⦠Note that we don't do the & thing here so that we can modify 189 // $cached_settings later and not have the changes be "permanent." 190 $cached_settings = drupal_static('_pathologic_filter'); 191 // If it appears the path is a scheme-less URL, prepend a scheme to it. 192 // parse_url() cannot properly parse scheme-less URLs. Don't worry; if it 193 // looks like Pathologic can't handle the URL, it will return the scheme-less 194 // original. 195 // @see https://drupal.org/node/1617944 196 // @see https://drupal.org/node/2030789 197 if (strpos($matches[2], '//') === 0) { 198 if (isset($_SERVER['https']) && strtolower($_SERVER['https']) === 'on') { 199 $matches[2] = 'https:' . $matches[2]; 200 } 201 else { 202 $matches[2] = 'http:' . $matches[2]; 203 } 204 } 205 // Now parse the URL after reverting HTML character encoding. 206 // @see http://drupal.org/node/1672932 207 $original_url = htmlspecialchars_decode($matches[2]); 208 // â¦and parse the URL 209 $parts = @parse_url($original_url); 210 // Do some more early tests to see if we should just give up now. 211 if ( 212 // If parse_url() failed, give up. 213 $parts === FALSE 214 || ( 215 // If there's a scheme part and it doesn't look useful, bail out. 216 isset($parts['scheme']) 217 // We allow for the storage of permitted schemes in a variable, though we 218 // don't actually give the user any way to edit it at this point. This 219 // allows developers to set this array if they have unusual needs where 220 // they don't want Pathologic to trip over a URL with an unusual scheme. 221 // @see http://drupal.org/node/1834308 222 // "files" and "internal" are for Path Filter compatibility. 223 && !in_array($parts['scheme'], variable_get('pathologic_scheme_whitelist', array('http', 'https', 'files', 'internal'))) 224 ) 225 // Bail out if it looks like there's only a fragment part. 226 || (isset($parts['fragment']) && count($parts) === 1) 227 ) { 228 // Give up by "replacing" the original with the same. 229 return $matches[0]; 230 } 231 232 if (isset($parts['path'])) { 233 // Undo possible URL encoding in the path. 234 // @see http://drupal.org/node/1672932 235 $parts['path'] = rawurldecode($parts['path']); 236 } 237 else { 238 $parts['path'] = ''; 239 } 240 241 // Check to see if we're dealing with a file. 242 // @todo Should we still try to do path correction on these files too? 243 if (isset($parts['scheme']) && $parts['scheme'] === 'files') { 244 // Path Filter "files:" support. What we're basically going to do here is 245 // rebuild $parts from the full URL of the file. 246 $new_parts = @parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); 247 // If there were query parts from the original parsing, copy them over. 248 if (!empty($parts['query'])) { 249 $new_parts['query'] = $parts['query']; 250 } 251 $new_parts['path'] = rawurldecode($new_parts['path']); 252 $parts = $new_parts; 253 // Don't do language handling for file paths.
254 $cached_settings['is_file'] = TRUE; 255 } 256 else { 257 $cached_settings['is_file'] = FALSE; 258 } 259 260 // Let's also bail out of this doesn't look like a local path. 261 $found = FALSE; 262 // Cycle through local paths and find one with a host and a path that matches; 263 // or just a host if that's all we have; or just a starting path if that's 264 // what we have. 265 foreach ($cached_settings['current_settings']['local_paths_exploded'] as $exploded) { 266 // If a path is available in both⦠267 if (isset($exploded['path']) && isset($parts['path']) 268 // And the paths match⦠269 && strpos($parts['path'], $exploded['path']) === 0 270 // And either they have the same host, or both have no host⦠271 && ( 272 (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) 273 || (!isset($exploded['host']) && !isset($parts['host'])) 274 ) 275 ) { 276 // Remove the shared path from the path. This is because the "Also local" 277 // path was something like http://foo/bar and this URL is something like 278 // http://foo/bar/baz; or the "Also local" was something like /bar and 279 // this URL is something like /bar/baz. And we only care about the /baz 280 // part. 281 $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); 282 $found = TRUE; 283 // Break out of the foreach loop 284 break; 285 } 286 // Okay, we didn't match on path alone, or host and path together. Can we 287 // match on just host? Note that for this one we are looking for paths which 288 // are just hosts; not hosts with paths. 289 elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { 290 // No further editing; just continue 291 $found = TRUE; 292 // Break out of foreach loop 293 break; 294 } 295 // Is this is a root-relative url (no host) that didn't match above? 296 // Allow a match if local path has no path, 297 // but don't "break" because we'd prefer to keep checking for a local url 298 // that might more fully match the beginning of our url's path 299 // e.g.: if our url is /foo/bar we'll mark this as a match for 300 // http://example.com but want to keep searching and would prefer a match 301 // to http://example.com/foo if that's configured as a local path 302 elseif (!isset($parts['host']) && (!isset($exploded['path']) || $exploded['path'] === $base_path)) { 303 $found = TRUE; 304 } 305 } 306 307 // If the path is not within the drupal root return original url, unchanged 308 if (!$found) { 309 return $matches[0]; 310 } 311 312 // Okay, format the URL. 313 // If there's still a slash lingering at the start of the path, chop it off. 314 $parts['path'] = ltrim($parts['path'],'/'); 315 316 // Examine the query part of the URL. Break it up and look through it; if it 317 // has a value for "q", we want to use that as our trimmed path, and remove it 318 // from the array. If any of its values are empty strings (that will be the 319 // case for "bar" if a string like "foo=3&bar&baz=4" is passed through 320 // parse_str()), replace them with NULL so that url() (or, more 321 // specifically, drupal_http_build_query()) can still handle it. 322 if (isset($parts['query'])) { 323 parse_str($parts['query'], $parts['qparts']); 324 foreach ($parts['qparts'] as $key => $value) { 325 if ($value === '') { 326 $parts['qparts'][$key] = NULL; 327 } 328 elseif ($key === 'q') { 329 $parts['path'] = $value; 330 unset($parts['qparts']['q']); 331 } 332 } 333 } 334 else { 335 $parts['qparts'] = NULL; 336 } 337 338 // If we don't have a path yet, bail out. 339 if (!isset($parts['path'])) { 340 return $matches[0]; 341 } 342 343 // If we didn't previously identify this as a file, check to see if the file 344 // exists now that we have the correct path relative to DRUPAL_ROOT 345 if (!$cached_settings['is_file']) {
346 $cached_settings['is_file'] = !empty($parts['path']) && is_file(DRUPAL_ROOT . '/'. $parts['path']); 347 } 348 349 // Okay, deal with language stuff. 350 if ($cached_settings['is_file']) { 351 // If we're linking to a file, use a fake LANGUAGE_NONE language object. 352 // Otherwise, the path may get prefixed with the "current" language prefix 353 // (eg, /ja/misc/message-24-ok.png) 354 $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); 355 } 356 else { 357 // Let's see if we can split off a language prefix from the path. 358 if (module_exists('locale')) { 359 // Sometimes this file will be require_once-d by the locale module before 360 // this point, and sometimes not. We require_once it ourselves to be sure. 361 require_once DRUPAL_ROOT . '/includes/language.inc'; 362 list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); 363 if ($language_obj) { 364 $parts['path'] = $path; 365 $parts['language_obj'] = $language_obj; 366 } 367 } 368 } 369 370 // If we get to this point and $parts['path'] is now an empty string (which 371 // will be the case if the path was originally just "/"), then we 372 // want to link to <front>. 373 if ($parts['path'] === '') { 374 $parts['path'] = '<front>'; 375 } 376 // Build the parameters we will send to url() 377 $url_params = array( 378 'path' => $parts['path'], 379 'options' => array( 380 'query' => $parts['qparts'], 381 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, 382 // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but 383 // not if it's 'path'. 384 'absolute' => $cached_settings['current_settings']['protocol_style'] !== 'path', 385 // If we seem to have found a language for the path, pass it along to 386 // url(). Otherwise, ignore the 'language' parameter. 387 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, 388 // A special parameter not actually used by url(), but we use it to see if 389 // an alter hook implementation wants us to just pass through the original 390 // URL. 391 'use_original' => FALSE, 392 ), 393 ); 394 395 // Add the original URL to the parts array 396 $parts['original'] = $original_url; 397 398 // Now alter! 399 // @see http://drupal.org/node/1762022 400 drupal_alter('pathologic', $url_params, $parts, $cached_settings); 401 402 // If any of the alter hooks asked us to just pass along the original URL, 403 // then do so. 404 if ($url_params['options']['use_original']) { 405 return $matches[0]; 406 } 407 408 // If the path is for a file and clean URLs are disabled, then the path that 409 // url() will create will have a q= query fragment, which won't work for 410 // files. To avoid that, we use this trick to temporarily turn clean URLs on. 411 // This is horrible, but it seems to be the sanest way to do this. 412 // @see http://drupal.org/node/1672430 413 // @todo Submit core patch allowing clean URLs to be toggled by option sent 414 // to url()? 415 if (!empty($cached_settings['is_file'])) {
416 $cached_settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); 417 if (!$cached_settings['orig_clean_url']) { 418 $GLOBALS['conf']['clean_url'] = TRUE; 419 } 420 } 421 422 // Now for the url() call. Drumroll, please⦠423 $url = url($url_params['path'], $url_params['options']); 424 425 // If we turned clean URLs on before to create a path to a file, turn them 426 // back off�. 427 if ($cached_settings['is_file'] && !$cached_settings['orig_clean_url']) { 428 $GLOBALS['conf']['clean_url'] = FALSE; 429 } 430 431 // If we need to create a protocol-relative URL, then convert the absolute 432 // URL we have now. 433 if ($cached_settings['current_settings']['protocol_style'] === 'proto-rel') { 434 // Now, what might have happened here is that url() returned a URL which 435 // isn't on "this" server due to a hook_url_outbound_alter() implementation. 436 // We don't want to convert the URL in that case. So what we're going to 437 // do is cycle through the local paths again and see if the host part of 438 // $url matches with the host of one of those, and only alter in that case. 439 $url_parts = @parse_url($url); 440 if (!empty($url_parts['host']) && $url_parts['host'] === $cached_settings['current_settings']['base_url_host']) { 441 $url = _pathologic_url_to_protocol_relative($url); 442 } 443 } 444 445 // Apply HTML character encoding, as is required for HTML attributes. 446 // @see http://drupal.org/node/1672932 447 $url = check_plain($url); 448 // $matches[1] will be the tag attribute; src, href, etc. 449 return " {$matches[1]}=\"{$url}"; 450} 451 452/** 453 * Convert a full URL with a protocol to a protocol-relative URL. 454 * 455 * As the Drupal core url() function doesn't support protocol-relative URLs, we 456 * work around it by just creating a full URL and then running it through this 457 * to strip off the protocol. 458 * 459 * Though this is just a one-liner, it's placed in its own function so that it 460 * can be called independently from our test code. 461 */ 462function _pathologic_url_to_protocol_relative($url) { 463 return preg_replace('~^https?://~', '//', $url); 464} 465<!DOCTYPE html PUBLIC "-//W3C//DTD HTML+RDFa 1.1//EN">�<!--[if IEMobile 7 ]><html class="iem7 no-js"><![endif]--> 466<!--[if lt IE 7 ]> <html class="ie6 no-js" lang="en" dir="ltr" version="HTML+RDFa 1.1" 467 xmlns:content="http://purl.org/rss/1.0/modules/content/" 468 xmlns:dc="http://purl.org/dc/terms/" 469 xmlns:foaf="http://xmlns.com/foaf/0.1/" 470 xmlns:og="http://ogp.me/ns#" 471 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 472 xmlns:sioc="http://rdfs.org/sioc/ns#" 473 xmlns:sioct="http://rdfs.org/sioc/types#" 474 xmlns:skos="http://www.w3.org/2004/02/skos/core#" 475 xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 476 xmlns:fb="http://ogp.me/ns/fb#" 477 xmlns:article="http://ogp.me/ns/article#" 478 xmlns:book="http://ogp.me/ns/book#" 479 xmlns:profile="http://ogp.me/ns/profile#" 480 xmlns:video="http://ogp.me/ns/video#"> <![endif]--> 481<!--[if IE 7 ]> <html class="ie7 no-js" lang="en" dir="ltr" version="HTML+RDFa 1.1" 482 xmlns:content="http://purl.org/rss/1.0/modules/content/" 483 xmlns:dc="http://purl.org/dc/terms/" 484 xmlns:foaf="http://xmlns.com/foaf/0.1/" 485 xmlns:og="http://ogp.me/ns#" 486 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 487 xmlns:sioc="http://rdfs.org/sioc/ns#" 488 xmlns:sioct="http://rdfs.org/sioc/types#" 489 xmlns:skos="http://www.w3.org/2004/02/skos/core#" 490 xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 491 xmlns:fb="http://ogp.me/ns/fb#" 492 xmlns:article="http://ogp.me/ns/article#" 493 xmlns:book="http://ogp.me/ns/book#" 494 xmlns:profile="http://ogp.me/ns/profile#" 495 xmlns:video="http://ogp.me/ns/video#"> <![endif]--> 496<!--[if IE 8 ]> <html class="ie8 no-js" lang="en" dir="ltr" version="HTML+RDFa 1.1" 497 xmlns:content="http://purl.org/rss/1.0/modules/content/" 498 xmlns:dc="http://purl.org/dc/terms/" 499 xmlns:foaf="http://xmlns.com/foaf/0.1/" 500 xmlns:og="http://ogp.me/ns#" 501 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 502 xmlns:sioc="http://rdfs.org/sioc/ns#" 503 xmlns:sioct="http://rdfs.org/sioc/types#" 504 xmlns:skos="http://www.w3.org/2004/02/skos/core#" 505 xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 506 xmlns:fb="http://ogp.me/ns/fb#" 507 xmlns:article="http://ogp.me/ns/article#" 508 xmlns:book="http://ogp.me/ns/book#" 509 xmlns:profile="http://ogp.me/ns/profile#" 510 xmlns:video="http://ogp.me/ns/video#"> <![endif]--> 511<!--[if IE 9 ]> <html class="ie9 no-js" lang="en" dir="ltr" version="HTML+RDFa 1.1" 512 xmlns:content="http://purl.org/rss/1.0/modules/content/" 513 xmlns:dc="http://purl.org/dc/terms/" 514 xmlns:foaf="http://xmlns.com/foaf/0.1/" 515 xmlns:og="http://ogp.me/ns#" 516 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 517 xmlns:sioc="http://rdfs.org/sioc/ns#" 518 xmlns:sioct="http://rdfs.org/sioc/types#" 519 xmlns:skos="http://www.w3.org/2004/02/skos/core#" 520 xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 521 xmlns:fb="http://ogp.me/ns/fb#" 522 xmlns:article="http://ogp.me/ns/article#" 523 xmlns:book="http://ogp.me/ns/book#" 524 xmlns:profile="http://ogp.me/ns/profile#" 525 xmlns:video="http://ogp.me/ns/video#"> <![endif]--> 526<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en" dir="ltr" version="HTML+RDFa 1.1" 527 xmlns:content="http://purl.org/rss/1.0/modules/content/" 528 xmlns:dc="http://purl.org/dc/terms/" 529 xmlns:foaf="http://xmlns.com/foaf/0.1/" 530 xmlns:og="http://ogp.me/ns#" 531 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 532 xmlns:sioc="http://rdfs.org/sioc/ns#" 533 xmlns:sioct="http://rdfs.org/sioc/types#" 534 xmlns:skos="http://www.w3.org/2004/02/skos/core#" 535 xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 536 xmlns:fb="http://ogp.me/ns/fb#" 537 xmlns:article="http://ogp.me/ns/article#" 538 xmlns:book="http://ogp.me/ns/book#" 539 xmlns:profile="http://ogp.me/ns/profile#" 540 xmlns:video="http://ogp.me/ns/video#"> <!--<![endif]--> 541<head profile="http://www.w3.org/1999/xhtml/vocab"> 542 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 543<link type="text/plain" rel="author" href="http://www.causeofdeathwoman.com/humans.txt" /> 544<link rel="shortlink" href="/node/564" /> 545<link rel="canonical" href="/contact" /> 546<meta name="description" content="The project is the work of Karin Alfredsson, Linda Forsell and Kerstin Weigl together with the Swedish Association of Womenâs Shelters and Young Womenâs Empowerment Centres, SKR." /> 547<meta name="generator" content="Drupal 7 (http://drupal.org)" /> 548<meta property="og:site_name" content="Cause of Death: Woman" /> 549<meta property="og:type" content="article" /> 550<meta property="og:url" content="http://www.causeofdeathwoman.com/contact" /> 551<meta property="og:title" content="Contact" /> 552<meta property="og:description" content="The project is the work of Karin Alfredsson, Linda Forsell and Kerstin Weigl together with the Swedish Association of Womenâs Shelters and Young Womenâs Empowerment Centres, SKR." /> 553<meta property="og:image" content="/sites/default/themes/cod/img/codw-og-logo.png" /> 554�
554<script src="/sites/default/themes/cod/js/libs/modernizr-2.0.6.min.js"></script>
554�<meta charset="utf-8">�<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">�<meta http-equiv="cleartype" content="on"> <title>Contact | Cause of Death: Woman</title> 555 <link type="text/css" rel="stylesheet" href="http://www.causeofdeathwoman.com/sites/default/files/css/css_YNKTD7lL0YzVbzlJPpflpiR2uOLBYAkbWxUhzivMQa0.css" media="all" /> 556</head> 557<body class="html not-front not-logged-in no-sidebars page-node page-node- page-node-564 page-type-page i18n-en" > 558 559 <div id="fb-root"></div> 560<div id="page-wrapper"> 561<div id="page" class="wrapper clearfix"> 562 563 564 <header id="header" role="banner"> 565 <div id="logo"> 566 <a href="/" title="Home" rel="home"> 567 <img src="/sites/default/themes/cod/img/codw-logo.gif" width="490" height="80" alt="Home"> 568 </a> 569 </div> 570 <!-- / #logo --> 571 572 <div id="top-nav"> 573 <div id="search"> 574 <form class="search-form" role="search" action="/contact" method="post" id="custom-search-blocks-form-1" accept-charset="UTF-8"><div><div class="form-item form-type-textfield form-item-custom-search-blocks-form-1"> 575 <label for="edit-custom-search-blocks-form-1--2">Search </label> 576 <input title="Enter the terms you wish to search for." class="custom-search-box form-text" placeholder="" type="text" id="edit-custom-search-blocks-form-1--2" name="custom_search_blocks_form_1" value="" size="15" maxlength="128" /> 577</div> 578<input type="hidden" name="delta" value="1" /> 579<input type="hidden" name="form_build_id" value="form-FSHajymfqKEh5T5rQv0M_SPa28HrXBpcsC91TrDGfvY" /> 580<input type="hidden" name="form_id" value="custom_search_blocks_form_1" /> 581<div class="form-actions form-wrapper" id="edit-actions"><input type="submit" id="edit-submit" name="op" value="Search" class="form-submit" /></div></div></form> </div> 582 <!-- / #search --> 583 584 <ul id="top-nav-menu" class="menu"> 585 <li><a href="/contact" class="active">Contact</a></li> 586 587 <li><ul class="language-switcher-locale-url"><li class="en first active visuallyhidden"><a href="/contact" class="language-link active visuallyhidden" xml:lang="en">English</a></li> 588<li class="ru"><span class="language-link locale-untranslated" xml:lang="ru">Ð ÑÑÑкий</span></li> 589<li class="sv last"><span class="language-link locale-untranslated" xml:lang="sv">Svenska</span></li> 590</ul></li> 591 </ul> 592 <!-- / #top-nav-menu, .menu --> 593 </div> 594 <!-- / #top-nav --> 595 596 <div id="navigation"> 597 <nav class="region-menu" role="navigation"> 598 <a class="region-selector" role="presentation"> 599 <div class="region-selector-text">Select a country</div> 600 </a> 601 602 <div class="region-selector-ie7"> 603 <select id="region-selector-ie7-header"> 604 <option value="#">Select a country</option> 605 <option value="/country/brazil">Brazil</option> 606 <option value="/country/dr-congo">DR Congo</option> 607 <option value="/country/egypt">Egypt</option> 608 <option value="/country/mexico">Mexico</option> 609 <option value="/country/pakistan">Pakistan</option> 610 <option value="/country/russia">Russia</option> 611 <option value="/country/south-africa">South Africa</option> 612 <option value="/country/spain">Spain</option> 613 <option value="/country/sweden">Sweden</option> 614 <option value="/country/usa">USA</option> 615 </select> 616 </div> 617 <!-- / .region-selector-ie7 --> 618 619 <div class="region-menu-content"> 620 <!--<div class="region region-region-menu">--> 621 <section id="block-menu-block-6" class="block block-menu-block"> 622 623 <h2 class="title">America</h2> 624 625 <div class="block-content"> 626 <div class="menu-block-wrapper menu-block-6 menu-name-menu-regions parent-mlid-470 menu-level-1"> 627 <ul class="menu"><li class="first leaf menu-mlid-472"><a href="/country/brazil" title="">Brazil</a></li> 628<li class="leaf menu-mlid-475"><a href="/country/mexico" title="">Mexico</a></li> 629<li class="last leaf menu-mlid-479"><a href="/country/usa" title="">USA</a></li> 630</ul></div> 631 </div> 632</section> 633<!-- / #block-menu-block-6 --><section id="block-menu-block-5" class="block block-menu-block"> 634 635 <h2 class="title">Africa</h2> 636 637 <div class="block-content"> 638 <div class="menu-block-wrapper menu-block-5 menu-name-menu-regions parent-mlid-468 menu-level-1"> 639 <ul class="menu"><li class="first leaf menu-mlid-473"><a href="/country/dr-congo" title="">DR Congo</a></li> 640<li class="leaf menu-mlid-474"><a href="/country/egypt" title="">Egypt</a></li> 641<li class="last leaf menu-mlid-477"><a href="/country/south-africa" title="">South Africa</a></li> 642</ul></div> 643 </div> 644</section> 645<!-- / #block-menu-block-5 --><section id="block-menu-block-7" class="block block-menu-block"> 646 647 <h2 class="title">Europe</h2> 648 649 <div class="block-content"> 650 <div class="menu-block-wrapper menu-block-7 menu-name-menu-regions parent-mlid-469 menu-level-1"> 651 <ul class="menu"><li class="first leaf menu-mlid-480"><a href="/country/spain" title="">Spain</a></li> 652<li class="last leaf menu-mlid-478"><a href="/country/sweden" title="">Sweden</a></li> 653</ul></div> 654 </div> 655</section> 656<!-- / #block-menu-block-7 --><section id="block-menu-block-8" class="block block-menu-block"> 657 658 <h2 class="title">Asia</h2> 659 660 <div class="block-content"> 661 <div class="menu-block-wrapper menu-block-8 menu-name-menu-regions parent-mlid-467 menu-level-1"> 662 <ul class="menu"><li class="first leaf menu-mlid-466"><a href="/country/pakistan" title="">Pakistan</a></li> 663<li class="last leaf menu-mlid-476"><a href="/country/russia" title="">Russia</a></li> 664</ul></div> 665 </div> 666</section> 667<!-- / #block-menu-block-8 --> <!--</div>--> 668 <!-- / region_menu --> 669 <div class="region-menu-content-close" role="presentation">Close</div> 670 </div> 671 </nav> 672 <!-- / #region-menu --> 673 674 <nav id="main-menu" role="navigation"> 675 <!--<div class="region region-main-menu">--> 676 <section id="block-menu-block-1" class="block block-menu-block"> 677 678 679 <div class="block-content"> 680 <div class="menu-block-wrapper menu-block-1 menu-name-main-menu parent-mlid-0 menu-level-1"> 681 <ul class="menu"><li class="first leaf menu-mlid-482"><a href="/survivors" title="">Survivors</a></li> 682<li class="leaf menu-mlid-483"><a href="/killed" title="">Killed</a></li> 683<li class="leaf menu-mlid-481"><a href="/forces-for-change" title="">Forces for change</a></li> 684<li class="leaf menu-mlid-739"><a href="/quiz">Quiz</a></li> 685<li class="leaf menu-mlid-716"><a href="/press">Press</a></li> 686<li class="expanded menu-mlid-786"><a href="/course-material-0">Course Material</a><ul class="menu"><li class="first leaf menu-mlid-865"><a href="/arguments" title="">Arguments</a></li> 687<li class="leaf menu-mlid-868"><a href="/exhibition">Exhibition</a></li> 688<li class="leaf menu-mlid-866"><a href="/sayings" title="">Sayings</a></li> 689<li class="leaf menu-mlid-869"><a href="/course-material-basic">Course Material Basic</a></li> 690<li class="last leaf menu-mlid-870"><a href="/course-material-large" title="">Course Material Large</a></li> 691</ul></li> 692<li class="leaf menu-mlid-1279"><a href="/slideshows">Slideshows</a></li> 693<li class="last expanded menu-mlid-742"><a href="/about-the-project">About</a><ul class="menu"><li class="first leaf menu-mlid-671"><a href="/about-us">About us</a></li> 694<li class="leaf menu-mlid-855"><a href="/about-the-project" title="">About the project</a></li> 695<li class="leaf menu-mlid-856"><a href="/how-we-worked">How we worked</a></li> 696<li class="leaf menu-mlid-857"><a href="/karins-reflections" title="">Karin's reflections</a></li> 697<li class="leaf menu-mlid-858"><a href="/kerstins-reflections" title="">Kerstin's reflections</a></li> 698<li class="last leaf menu-mlid-859"><a href="/lindas-reflections" title="">Linda's reflections</a></li> 699</ul></li> 700</ul></div> 701 </div> 702</section> 703<!-- / #block-menu-block-1 --> <!--</div>--> 704 <!-- / main_menu --> 705 </nav> 706 <!-- / #main-menu --> 707 </div> 708 <!-- / #navigation --> 709 </header> 710 <!-- / #header --> 711 712 <div id="main" class="clearfix"> 713 <section id="content" role="main"> 714 715 716 <!--<div class="region region-content">--> 717 <section id="block-system-main" class="block block-system"> 718 719 720 <div class="block-content"> 721 <div class="panel-flexible panels-flexible-top_and_sidebar clearfix" > 722<div class="panel-flexible-inside panels-flexible-top_and_sidebar-inside"> 723<div class="panels-flexible-row panels-flexible-row-top_and_sidebar-1 panels-flexible-row-first clearfix top-content"> 724 <div class="inside panels-flexible-row-inside panels-flexible-row-top_and_sidebar-1-inside panels-flexible-row-inside-first clearfix"> 725<div class="panels-flexible-region panels-flexible-region-top_and_sidebar-top_content panels-flexible-region-first panels-flexible-region-last top-content"> 726 <div class="inside panels-flexible-region-inside panels-flexible-region-top_and_sidebar-top_content-inside panels-flexible-region-inside-first panels-flexible-region-inside-last"> 727<div class="panel-pane pane-views pane-quote-or-fact" > 728 729
730 731 <div class="pane-content"> 732 <section id="views-id-quote_or_fact-block" class="view view-quote-or-fact view-id-quote_or_fact view-display-id-block view-dom-id-b512df33f55dff8bbf7c1b871fdd0cfa"> 733 734 735 736 737 <section class="view-content"> 738 <div class="views-row views-row-1 views-row-odd views-row-first views-row-last"> 739 740 <div class="views-field views-field-title"> <span class="field-content">âI asked my husband to forgive me for being raped.â </span> </div> 741 <div class="views-field views-field-field-quotee"> <div class="field-content">Faida, Bukavu, Congo</div> </div> </div> 742 </section> 743 744 745 746 747 748</section> 749<!-- /#views-id-quote_or_fact-block --> </div> 750 751 752 </div> 753 </div> 754</div> 755 </div> 756</div> 757<div class="panels-flexible-row panels-flexible-row-top_and_sidebar-main-row panels-flexible-row-last clearfix mid-wrapper"> 758 <div class="inside panels-flexible-row-inside panels-flexible-row-top_and_sidebar-main-row-inside panels-flexible-row-inside-last clearfix"> 759<div class="panels-flexible-region panels-flexible-region-top_and_sidebar-center panels-flexible-region-first prose"> 760 <div class="inside panels-flexible-region-inside panels-flexible-region-top_and_sidebar-center-inside panels-flexible-region-inside-first"> 761<div class="panel-pane pane-node-title" > 762 763 764 765 <div class="pane-content"> 766 Contact </div> 767 768 769 </div> 770<div class="panel-separator"></div><div class="panel-pane pane-node-body small-prose" > 771 772 773 774 <div class="pane-content"> 775 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-item even" property="content:encoded"><h3>The project is the work of Karin Alfredsson, Linda Forsell and Kerstin Weigl together with the Swedish Association of Womenâs Shelters and Young Womenâs Empowerment Centres, <span class="caps">SKR</span>.  Funding was received from, among others, the Swedish International Development Cooperation Agency (Sida) and the Sigrid Rausing Trust.</h3><p><strong>Karin Alfredsson</strong> (<a href="http://www.karinalfredsson.se" target="_blank">www.karinalfredsson.se</a>) has written articles, debate books and novels on the subject of violence against women all her life, many from an international perspective.  â¨</p><p><strong>Linda Forsell </strong>(<a href="http://www.lindaforsell.com" target="_blank">www.lindaforsell.com</a>) has had an exhibition on the subject of sex and gender which has been shown all over Sweden. She has travelled and worked around the world, including in Israel/Palestine, Georgia and East Africa. â¨â¨</p><p><strong>Kerstin Weigl</strong> has been awarded a prize for investigative journalism for a unique study of all the women who have died in Sweden as a result of violence in close relationships during the 2000s. The investigation was undertaken together with Kristina Edblom, for the Swedish newspaper Aftonbladet.</p><p><strong>Unizon</strong> represents over 140 womenâs shelters, young womenâs empowerment centres and other organisations working for an equal society free from violence. Unizon is not affiliated to any political party or religion. Read more at <a href="http://www.unizonjourer.se" target="_blank">www.unizonjourer.se</a></p><h3>Press contact:</h3><p>Nina Ljungberg<br />Press seceratary<br /><a href="mailto:[email protected]">[email protected]</a>â¨<br />Tel: +46 (0)8-6426401</p></div></div> </div> 776 777 778 </div> 779 </div> 780</div> 781<div class="panels-flexible-region panels-flexible-region-top_and_sidebar-right panels-flexible-region-last sidebar-right"> 782 <div class="inside panels-flexible-region-inside panels-flexible-region-top_and_sidebar-right-inside panels-flexible-region-inside-last"> 783<div class="panel-pane pane-views pane-sidebar-articles clearfix view-articles-horizontal" > 784 785 <h2 class="pane-title">Survivor</h2> 786 787 788 <div class="pane-content"> 789 <section id="views-id-sidebar_articles-block" class="view view-sidebar-articles view-id-sidebar_articles view-display-id-block view-dom-id-4c3eb8e7970f5f50c1ffd9adbf908670"> 790 791 792 793 794 <section class="view-content"> 795 <div class="views-row views-row-1 views-row-odd views-row-first"> 796 797 <div> <div><a href="http://www.causeofdeathwoman.com/nyota"><div class="field-collection-view clearfix view-mode-teaser-small field-collection-view-final"><div class="entity entity-field-collection-item field-collection-item-field-sli
797des-collection clearfix" about="/field-collection/field-slides-collection/817" typeof=""> 798 <div class="content"> 799 <div class="field field-name-field-slideshow field-type-image field-label-hidden"> 800 <div class="field-items"> 801 <div class="field-item even"> 802 <img typeof="foaf:Image" src="http://www.causeofdeathwoman.com/sites/default/files/styles/small/public/kongo_survivor_nyota_1.jpg?itok=MRwESstP" width="177" height="118" /> </div> 803 </div> 804</div> 805 </div> 806</div> 807</div></a></div> </div> 808 <span> <span><div class="term"><a href="/survivors" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Survivor</a>, <a href="/location/bukavu" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Bukavu</a>, <a href="/country/dr-congo" typeof="skos:Concept" property="rdfs:label skos:prefLabel">DR Congo</a></div></span> </span> 809 <div class="views-field views-field-title"> <h2 class="field-content"><a href="/nyota">Nyota</a></h2> </div> </div> 810 <div class="views-row views-row-2 views-row-even views-row-last"> 811 812 <div> <div><a href="http://www.causeofdeathwoman.com/rosangela"><div class="field-collection-view clearfix view-mode-teaser-small field-collection-view-final"><div class="entity entity-field-collection-item field-collection-item-field-slides-collection clearfix" about="/field-collection/field-slides-collection/340" typeof=""> 813 <div class="content">
814 <div class="field field-name-field-slideshow field-type-image field-label-hidden"> 815 <div class="field-items"> 816 <div class="field-item even"> 817 <img typeof="foaf:Image" src="http://www.causeofdeathwoman.com/sites/default/files/styles/small/public/brazil_survivor_rosangela_1.jpg?itok=oS-Qm49S" width="177" height="118" /> </div> 818 </div> 819</div> 820 </div> 821</div> 822</div></a></div> </div> 823 <span> <span><div class="term"><a href="/survivors" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Survivor</a>, <a href="/location/sao-goncalo" typeof="skos:Concept" property="rdfs:label skos:prefLabel">São Gonçalo</a>, <a href="/country/brazil" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Brazil</a></div></span> </span> 824 <div class="views-field views-field-title"> <h2 class="field-content"><a href="/rosangela">Rosângela</a></h2> </div> </div> 825 </section> 826 827 <nav class="pager"><div class="item-list"><ul class="pager"><li class="pager-previous first"> </li> 828<li class="pager-next last"><a title="Go to next page" href="/contact?page=1">next âº</a></li> 829</ul></div></nav> 830 831 832 833 834</section> 835<!-- /#views-id-sidebar_articles-block --> </div> 836 837 838 </div> 839<div class="panel-separator"></div><div class="panel-pane pane-views pane-sidebar-articles clearfix view-articles-horizontal" > 840 841 <h2 class="pane-title">Forces for Change</h2> 842 843 844 <div class="pane-content"> 845 <section id="views-id-sidebar_articles-block" class="view view-sidebar-articles view-id-sidebar_articles view-display-id-block view-dom-id-8b026f14694af6d4387a6c05fb7e2f86"> 846 847 848 849 850 <section class="view-content"> 851 <div class="views-row views-row-1 views-row-odd views-row-first"> 852 853 <div> <div><a href="http://www.causeofdeathwoman.com/the-project-for-equality"><div class="field-collection-view clearfix view-mode-teaser-small field-collection-view-final"><div class="entity entity-field-collection-item field-collection-item-field-slides-collection clearfix" about="/field-collection/field-slides-collection/1235" typeof=""> 854 <div class="content">
855 <div class="field field-name-field-slideshow field-type-image field-label-hidden"> 856 <div class="field-items"> 857 <div class="field-item even"> 858 <img typeof="foaf:Image" src="http://www.causeofdeathwoman.com/sites/default/files/styles/small/public/kongo_changer_mathilde_muhindo.jpg?itok=qyDJH1YE" width="177" height="118" /> </div> 859 </div> 860</div> 861 </div> 862</div> 863</div></a></div> </div> 864 <span> <span><div class="term"><a href="/forces-for-change" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Forces for Change</a>, <a href="/location/kivu" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Kivu</a>, <a href="/country/dr-congo" typeof="skos:Concept" property="rdfs:label skos:prefLabel">DR Congo</a></div></span> </span> 865 <div class="views-field views-field-title"> <h2 class="field-content"><a href="/the-project-for-equality">The Project for Equality</a></h2> </div> </div> 866 <div class="views-row views-row-2 views-row-even views-row-last"> 867 868 <div> <div><a href="http://www.causeofdeathwoman.com/panzi-hospital"><div class="field-collection-view clearfix view-mode-teaser-small field-collection-view-final"><div class="entity entity-field-collection-item field-collection-item-field-slides-collection clearfix" about="/field-collection/field-slides-collection/1018" typeof=""> 869 <div class="content">
870 <div class="field field-name-field-slideshow field-type-image field-label-hidden"> 871 <div class="field-items"> 872 <div class="field-item even"> 873 <img typeof="foaf:Image" src="http://www.causeofdeathwoman.com/sites/default/files/styles/small/public/kongo_changer_hospital_1.jpg?itok=10UlcsLu" width="177" height="118" /> </div> 874 </div> 875</div> 876 </div> 877</div> 878</div></a></div> </div> 879 <span> <span><div class="term"><a href="/forces-for-change" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Forces for Change</a>, <a href="/location/bukavu" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Bukavu</a>, <a href="/country/dr-congo" typeof="skos:Concept" property="rdfs:label skos:prefLabel">DR Congo</a></div></span> </span> 880 <div class="views-field views-field-title"> <h2 class="field-content"><a href="/panzi-hospital">Panzi Hospital</a></h2> </div> </div> 881 </section> 882 883 <nav class="pager"><div class="item-list"><ul class="pager"><li class="pager-previous first"> </li> 884<li class="pager-next last"><a title="Go to next page" href="/contact?page=1">next âº</a></li> 885</ul></div></nav> 886 887 888 889 890</section> 891<!-- /#views-id-sidebar_articles-block --> </div> 892 893 894 </div> 895<div class="panel-separator"></div><div class="panel-pane pane-views pane-sidebar-articles clearfix view-articles-horizontal" > 896 897 <h2 class="pane-title">Killed</h2> 898 899 900 <div class="pane-content"> 901 <section id="views-id-sidebar_articles-block" class="view view-sidebar-articles view-id-sidebar_articles view-display-id-block view-dom-id-a14d6f6415e14d24ed0971a721446079"> 902 903 904 905 906 <section class="view-content"> 907 <div class="views-row views-row-1 views-row-odd views-row-first"> 908 909 <div> <div><a href="http://www.causeofdeathwoman.com/maggie-wardle"><div class="field-collection-view clearfix view-mode-teaser-small field-collection-view-final"><div class="entity entity-field-collection-item field-collection-item-field-slides-collection clearfix" about="/field-collection/field-slides-collection/476" typeof=""> 910 <div class="content">
911 <div class="field field-name-field-slideshow field-type-image field-label-hidden"> 912 <div class="field-items"> 913 <div class="field-item even"> 914 <img typeof="foaf:Image" src="http://www.causeofdeathwoman.com/sites/default/files/styles/small/public/usa_victim_maggie.jpg?itok=9CG9QYds" width="177" height="118" /> </div> 915 </div> 916</div> 917 </div> 918</div> 919</div></a></div> </div> 920 <span> <span><div class="term"><a href="/killed" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Killed</a>, <a href="/location/kalamazoo-michigan" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Kalamazoo Michigan</a>, <a href="/country/usa" typeof="skos:Concept" property="rdfs:label skos:prefLabel">USA</a></div></span> </span> 921 <div class="views-field views-field-title"> <h2 class="field-content"><a href="/maggie-wardle">Maggie Wardle</a></h2> </div> </div> 922 <div class="views-row views-row-2 views-row-even views-row-last"> 923 924 <div> <div><a href="http://www.causeofdeathwoman.com/eudy-simelane"><div class="field-collection-view clearfix view-mode-teaser-small field-collection-view-final"><div class="entity entity-field-collection-item field-collection-item-field-slides-collection clearfix" about="/field-collection/field-slides-collection/679" typeof=""> 925 <div class="content">
926 <div class="field field-name-field-slideshow field-type-image field-label-hidden"> 927 <div class="field-items"> 928 <div class="field-item even"> 929 <img typeof="foaf:Image" src="http://www.causeofdeathwoman.com/sites/default/files/styles/small/public/southafrica_victim_eudy.jpg?itok=EcIWUH5h" width="177" height="118" /> </div> 930 </div> 931</div> 932 </div> 933</div> 934</div></a></div> </div> 935 <span> <span><div class="term"><a href="/killed" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Killed</a>, <a href="/location/kwathema" typeof="skos:Concept" property="rdfs:label skos:prefLabel">KwaThema</a>, <a href="/country/south-africa" typeof="skos:Concept" property="rdfs:label skos:prefLabel">South Africa</a></div></span> </span> 936 <div class="views-field views-field-title"> <h2 class="field-content"><a href="/eudy-simelane">Eudy Simelane </a></h2> </div> </div> 937 </section> 938 939 <nav class="pager"><div class="item-list"><ul class="pager"><li class="pager-previous first"> </li> 940<li class="pager-next last"><a title="Go to next page" href="/contact?page=1">next âº</a></li> 941</ul></div></nav> 942 943 944 945 946</section> 947<!-- /#views-id-sidebar_articles-block --> </div> 948 949 950 </div> 951 </div> 952</div> 953 </div> 954</div> 955</div> 956</div> 957 </div> 958</section> 959<!-- / #block-system-main --> <!--</div>--> 960 <!-- / content --> 961 </section> 962 <!-- / #content --> 963 </div> 964 <!-- / #main --> 965</div> 966<!-- / #page --> 967</div> 968<!-- / #page-wrapper --> 969 970<footer id="footer" class="clearfix" role="contentinfo"> 971 <div class="wrapper"> 972 <div id="footer-region"> <!--<div class="region region-footer">--> 973 <section id="block-menu-block-2" class="block block-menu-block"> 974 975 <h2 class="title">Cause of Death: Woman</h2> 976 977 <div class="block-content"> 978 <div class="menu-block-wrapper menu-block-2 menu-name-menu-footer parent-mlid-771 menu-level-1"> 979 <ul class="menu"><li class="first leaf menu-mlid-767"><a href="/survivors" title="">Survivors</a></li> 980<li class="leaf menu-mlid-765"><a href="/killed" title="">Killed</a></li> 981<li class="last leaf menu-mlid-768"><a href="/forces-for-change" title="">Forces for change</a></li> 982</ul></div> 983 </div> 984</section> 985<!-- / #block-menu-block-2 --><section id="block-menu-block-11" class="block block-menu-block"> 986 987 <h2 class="title">Spread Cause of Death: Woman</h2> 988 989 <div class="block-content"> 990 <div class="menu-block-wrapper menu-block-11 menu-name-menu-footer parent-mlid-773 menu-level-1"> 991 <ul class="menu"><li class="first leaf menu-mlid-774"><a href="/quiz" title="">Quiz</a></li> 992<li class="leaf menu-mlid-779"><a href="/course-material-0" title="">Course Material</a></li> 993<li class="last leaf menu-mlid-778"><a href="/exhibition">Exhibition</a></li> 994</ul></div> 995 </div> 996</section> 997<!-- / #block-menu-block-11 --><section id="block-menu-block-9" class="block block-menu-block"> 998 999 <h2 class="title">About us</h2> 1000 1001 <div class="block-content"> 1002 <div class="menu-block-wrapper menu-block-9 menu-name-menu-footer parent-mlid-711 menu-level-1"> 1003 <ul class="menu"><li class="first leaf menu-mlid-772"><a href="/press" title="">Press</a></li> 1004<li class="leaf menu-mlid-461"><a href="/about-the-project" title="">About the project</a></li> 1005<li class="last leaf active-trail active menu-mlid-782"><a href="/contact" class="active-trail active">Contact</a></li> 1006</ul></div> 1007 </div> 1008</section> 1009<!-- / #block-menu-block-9 --> <!--</div>--> 1010 <!-- / footer --> 1011</div> 1012 1013 <nav class="region-menu" role="navigation"> 1014 <a class="region-selector" role="presentation"> 1015 <div class="region-selector-text">Select a country</div> 1016 </a> 1017 1018 <div class="region-menu-content"> 1019 <!--<div class="region region-region-menu">--> 1020 <!--<div class="region region-region-menu">--> 1021 <section id="block-menu-block-6" class="block block-menu-block"> 1022 1023 <h2 class="title">America</h2> 1024 1025 <div class="block-content"> 1026 <div class="menu-block-wrapper menu-block-6 menu-name-menu-regions parent-mlid-470 menu-level-1"> 1027 <ul class="menu"><li class="first leaf menu-mlid-472"><a href="/country/brazil" title="">Brazil</a></li> 1028<li class="leaf menu-mlid-475"><a href="/country/mexico" title="">Mexico</a></li> 1029<li class="last leaf menu-mlid-479"><a href="/country/usa" title="">USA</a></li> 1030</ul></div> 1031 </div> 1032</section> 1033<!-- / #block-menu-block-6 --><section id="block-menu-block-5" class="block block-menu-block"> 1034 1035 <h2 class="title">Africa</h2> 1036 1037 <div class="block-content"> 1038 <div class="menu-block-wrapper menu-block-5 menu-name-menu-regions parent-mlid-468 menu-level-1"> 1039 <ul class="menu"><li class="first leaf menu-mlid-473"><a href="/country/dr-congo" title="">DR Congo</a></li> 1040<li class="leaf menu-mlid-474"><a href="/country/egypt" title="">Egypt</a></li> 1041<li class="last leaf menu-mlid-477"><a href="/country/south-africa" title="">South Africa</a></li> 1042</ul></div> 1043 </div> 1044</section> 1045<!-- / #block-menu-block-5 --><section id="block-menu-block-7" class="block block-menu-block"> 1046 1047 <h2 class="title">Europe</h2> 1048 1049 <div class="block-content"> 1050 <div class="menu-block-wrapper menu-block-7 menu-name-menu-regions parent-mlid-469 menu-level-1"> 1051 <ul class="menu"><li class="first leaf menu-mlid-480"><a href="/country/spain" title="">Spain</a></li> 1052<li class="last leaf menu-mlid-478"><a href="/country/sweden" title="">Sweden</a></li> 1053</ul></div> 1054 </div> 1055</section> 1056<!-- / #block-menu-block-7 --><section id="block-menu-block-8" class="block block-menu-block"> 1057 1058 <h2 class="title">Asia</h2> 1059 1060 <div class="block-content"> 1061 <div class="menu-block-wrapper menu-block-8 menu-name-menu-regions parent-mlid-467 menu-level-1"> 1062 <ul class="menu"><li class="first leaf menu-mlid-466"><a href="/country/pakistan" title="">Pakistan</a></li> 1063<li class="last leaf menu-mlid-476"><a href="/country/russia" title="">Russia</a></li> 1064</ul></div> 1065 </div> 1066</section> 1067<!-- / #block-menu-block-8 --> <!--</div>--> 1068 <!-- / region_menu --> 1069 <!--</div>--> 1070 <!-- / region_menu --> 1071 <div class="region-menu-content-close" role="presentation">Close</div> 1072 </div> 1073 </nav> 1074 <!-- / #region-menu --> 1075 1076 <div id="footer-skr"><a href="http://unizon.se"><img src="/sites/default/themes/cod/img/footer-logo-unizon.png" alt="Unizon" width="35" height="35"></a></div> 1077 1078 <div id="license"> 1079 <p> 1080 <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><strong><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Cause of Death: Woman</span></strong>
1080 is licensed under a Creative Commons BY-NC-ND 3.0 Unported License</a>. 1081 </p> 1082 </div> 1083 <!-- / #license --> 1084 </div> 1085</footer> 1086<!-- / #footer --> 1087 1088
1088<script type="text/javascript" src="http://www.causeofdeathwoman.com/sites/default/files/js/js_oCVMDTeSNt-_QxknevWyf6yO5OzmME3AhRz3ggZgNtg.js"></script>
vendor: 1 bytes, line 1088
1088
1089<script type="text/javascript" src="http://www.causeofdeathwoman.com/sites/default/files/js/js_9PoCIpaBdXzAfwjeoO2ibi_TtEs6jMROpVOwk-_WIBw.js"></script>
vendor: 1 bytes, line 1089
1089
1090<script type="text/javascript" src="http://www.causeofdeathwoman.com/sites/default/files/js/js__bMgEeYJAAEmXGVHARejapI0cjvV-DC3taol00OOoMA.js"></script>
vendor: 1 bytes, line 1090
1090
1091<script type="text/javascript"> 1092<!--//--><![CDATA[//><!--
vendor: 324 bytes, lines 1092-1093
1092 1093(function(i,s,o,g,r,a,m){i["GoogleAnalyticsObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,"script","//www.google-analytics.com/analytics.js","ga");ga("create", "
1093UA-29391000-1
vendor: 52 bytes, line 1093
1093", {"cookieDomain":"auto"});ga("send", "pageview");
1094//--><!]]> 1095</script>
vendor: 1 bytes, line 1095
1095
1096<script type="text/javascript" src="http://www.causeofdeathwoman.com/sites/default/files/js/js_kY_Pl8MfAHUp7404Oh1tALtBlh11v-czb7za_RVNcMA.js"></script>
vendor: 1 bytes, line 1096
1096
1097<script type="text/javascript"> 1098<!--//--><![CDATA[//><!-- 1099jQuery.extend(Drupal.settings, {"basePath":"\/","pathPrefix":"","ajaxPageState":{"theme":"cod","theme_token":"HcVxkyECOSvSdoUG6zRVW4Eoxk5aPNlIRcwiRzhlZFQ","jquery_version":"1.10","js":{"sites\/all\/modules\/jquery_update\/replace\/jquery\/1.10\/jquery.min.js":1,"misc\/jquery.once.js":1,"misc\/drupal.js":1,"sites\/all\/modules\/jquery_update\/replace\/ui\/external\/jquery.cookie.js":1,"sites\/all\/modules\/jquery_update\/replace\/misc\/jquery.form.min.js":1,"misc\/ajax.js":1,"sites\/all\/modules\/jquery_update\/js\/jquery_update.js":1,"sites\/all\/modules\/custom_search\/js\/custom_search.js":1,"sites\/all\/modules\/views\/js\/base.js":1,"misc\/progress.js":1,"sites\/all\/modules\/google_analytics\/googleanalytics.js":1,"sites\/all\/modules\/views\/js\/ajax_view.js":1,"0":1,"sites\/default\/themes\/cod\/js\/libs\/jquery.hoverIntent.minified.js":1,"sites\/default\/themes\/cod\/js\/codw.js":1,"sites\/default\/themes\/cod\/js\/codw.ru.js":1},"css":{"sites\/default\/themes\/kollegorna\/css\/reset.css":1,"modules\/search\/search.css":1,"sites\/all\/modules\/quiz\/quiz.css":1,"sites\/all\/modules\/logintoboggan\/logintoboggan.css":1,"modules\/user\/user.css":1,"modules\/node\/node.css":1,"sites\/all\/modules\/views\/css\/views.css":1,"modules\/locale\/locale.css":1,"sites\/all\/modules\/custom_search\/custom_search.css":1,"public:\/\/ctools\/css\/e86522ad0296cbcee26a24f9e2ff0082.css":1,"sites\/all\/modules\/panels\/plugins\/layouts\/flexible\/flexible.css":1,"sites\/all\/modules\/typogrify\/typogrify.css":1,"modules\/field\/theme\/field.css":1,"sites\/all\/modules\/date\/date_popup\/themes\/datepicker.1.7.css":1,"sites\/all\/modules\/date\/date_api\/date.css":1,"sites\/all\/modules\/oembed\/oembed.base.css":1,"sites\/all\/modules\/ctools\/css\/ctools.css":1,"sites\/all\/modules\/panels\/css\/panels.css":1,"sites\/all\/modules\/oembed\/oembed.theme.css":1,"modules\/system\/system.base.css":1,"modules\/system\/system.theme.css":1,"modules\/system\/system.messages.css":1,"sites\/default\/themes\/kollegorna\/css\/setup.css":1,"sites\/default\/themes\/cod\/css\/ie.css":1,"sites\/default\/themes\/cod\/css\/style.css":1}},"custom_search":{"form_target":"_self","solr":0},"views":{"ajax_path":"\/views\/ajax","ajaxViews":{"views_dom_id:4c3eb8e7970f5f50c1ffd9adbf908670":{"view_name":"sidebar_articles","view_display_id":"block","view_args":"survivor","view_path":"node\/564","view_base_path":null,"view_dom_id":"4c3eb8e7970f5f50c1ffd9adbf908670","pager_element":0},"views_dom_id:8b026f14694af6d4387a6c05fb7e2f86":{"view_name":"sidebar_articles","view_display_id":"block","view_args":"Forces for Change","view_path":"node\/564","view_base_path":null,"view_dom_id":"8b026f14694af6d4387a6c05fb7e2f86","pager_element":0},"views_dom_id:a14d6f6415e14d24ed0971a721446079":{"view_name":"sidebar_articles","view_display_id":"block","view_args":"killed","view_path":"node\/564","view_base_path":null,"view_dom_id":"a14d6f6415e14d24ed0971a721446079","pager_element":0}}},"better_exposed_filters":{"views":{"sidebar_articles":{"displays":{"block":{"filters":[]}}},"banner":{"displays":{"skr_banner":{"filters":[]}}},"quote_or_fact":{"displays":{"block":{"filters":[]}}}}},"googleanalytics":{"trackOutbound":1,"trackMailto":1,"trackDownload":1,"trackDownloadExtensions":"7z|aac|arc|arj|asf|asx|avi|bin|csv|doc(x|m)?|dot(x|m)?|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mp(2|3|4|e?g)|mov(ie)?|msi|msp|pdf|phps|png|ppt(x|m)?|pot(x|m)?|pps(x|m)?|ppam|sld(x|m)?|thmx|qtm?|ra(m|r)?|sea|sit|tar|tgz|torrent|txt|wav|wma|wmv|wpd|xls(x|m|b)?|xlt(x|m)|xlam|xml|z|zip"}}); 1100//--><!]]> 1101</script>
1101 1102 1103 1104
1104<script>(function(d, s, id) { 1105 var js, fjs = d.getElementsByTagName(s)[0]; 1106 if (d.getElementById(id)) return; 1107 js = d.createElement(s); js.id = id; 1108 js.src = "//connect.facebook.net/sv_SE/all.js#xfbml=1&appId=125638377515172"; 1109 fjs.parentNode.insertBefore(js, fjs); 1110 }(document, 'script', 'facebook-jssdk'));</script>
1110 1111 1112
1112<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
1112 1113 </body> 1114</html> 1115<!-- Page cached by Boost @ 2026-09-26 13:49:28, expires @ 2026-09-26 14:04:28, lifetime 15 min -->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.