]> git.mjollnir.org Git - s9y.git/commitdiff
Enhanced pingback/trackback receiving
authorbrockhaus <brockhaus>
Sat, 12 Jan 2008 13:06:37 +0000 (13:06 +0000)
committerbrockhaus <brockhaus>
Sat, 12 Jan 2008 13:06:37 +0000 (13:06 +0000)
docs/NEWS
include/functions_trackbacks.inc.php

index 9562be361b392d4d054a24c4b09ca4e5b66b2d35..baf4044363cb7219a421424fdc093379ff88d348 100644 (file)
--- a/docs/NEWS
+++ b/docs/NEWS
@@ -3,6 +3,16 @@
 Version 1.3 ()
 ------------------------------------------------------------------------
 
+    * Pingback/Trackback textfetching: HTML Entities are now converted
+      to characters. Character encoding defaults to UTF-8 but can be 
+      configured via $serendipity['pingbackEntityEncoding'] = "UTF-8"
+      in your serendipity_config_local.php (brockhaus)
+
+    * For Pingback it is now possible to define the maximum amount of
+      characters while fetching text of the remote site. Add 
+      $serendipity['pingbackFetchPageMaxLenght'] = 200 to your 
+      serendipity_config_local.php. (brockhaus)
+
     * Add ability to set comments as "pending" again, even when already
       approved in the comment-moderation backend panel.
       (garvinhicking)
index cb9dd1f538bb743daed61421d2ed9a52e8b5927c..8e4b8faf255cfe2692943a0e8afd755a56eca3aa 100644 (file)
@@ -320,6 +320,9 @@ function add_trackback ($id, $title, $url, $name, $excerpt) {
         $title = $url;
     }
 
+    // Decode HTML Entities
+    $excerpt = trackback_body_strip($excerpt);
+    
     $comment = array(
         'title'   => $title,
         'url'     => $url,
@@ -489,6 +492,17 @@ function fetchPingbackData( &$comment) {
         return;
     }
     
+    // Max amount of characters fetched from the page doing a pingback:
+    $fetchPageMaxLenght = 200;
+    if (isset($serendipity['pingbackFetchPageMaxLenght'])){
+        $fetchPageMaxLenght = $serendipity['pingbackFetchPageMaxLenght'];
+    }
+    // HTML Entity Encoding
+    $entityEncoding = "UTF-8";
+    if (isset($serendipity['pingbackEntityEncoding'])){
+        $entityEncoding = $serendipity['pingbackEntityEncoding'];
+    }
+    
     require_once S9Y_PEAR_PATH . 'HTTP/Request.php';
     $url = $comment['url'];
     
@@ -507,7 +521,7 @@ function fetchPingbackData( &$comment) {
 
         // Get a title
         if (preg_match('@<head[^>]*>.*?<title[^>]*>(.*?)</title>.*?</head>@is',$fContent,$matches)) {
-            $comment['title'] = strip_tags($matches[1]);
+            $comment['title'] = html_entity_decode(strip_tags($matches[1]),ENT_COMPAT,$entityEncoding);
         }
         
         // Try to get content from first <p> tag on:
@@ -519,16 +533,10 @@ function fetchPingbackData( &$comment) {
         }
         // Get a part of the article
         if (!empty($body)) {
-            $body = strip_tags($body);
-
-            //TODO: Serendipity comes into trouble wit html_entity_decode and "Umlaute"
-            $body = str_replace(array("&nbsp;"),array(' '),$body);
-            
-            // replace whitespace with single space            
-            $body = preg_replace('@\s+@s', ' ', $body);
-            
+            $body = trackback_body_strip($body);
+
             // truncate the text to 200 chars
-            $arr = str_split($body, 200);
+            $arr = str_split($body, $fetchPageMaxLenght);
             $body = $arr[0];
 
             $comment['comment'] = $body . '[..]';
@@ -539,6 +547,27 @@ function fetchPingbackData( &$comment) {
     
 }
 
+/**
+ * Strips any unneeded code from trackback / pingback bodies returning pure (UTF8) text.
+ */
+function trackback_body_strip( $body ){
+    // replace non brakeable space with normal space:            
+    $body = str_replace('&nbsp;', ' ', $body);
+
+    // HTML Entity Encoding
+    $entityEncoding = "UTF-8";
+    if (isset($serendipity['pingbackEntityEncoding'])){
+        $entityEncoding = $serendipity['pingbackEntityEncoding'];
+    }
+    // strip html entities and tags.
+    $body = html_entity_decode(strip_tags($body),ENT_COMPAT,$entityEncoding);
+
+    // replace whitespace with single space            
+    $body = preg_replace('@\s+@s', ' ', $body);
+    
+    return $body;
+}
+
 /**
  * Create an excerpt for a trackback to send
  *