]> git.mxchange.org Git - friendica.git/commitdiff
manually fix escaped underscores in links
authorZach Prezkuta <fermion@gmx.com>
Mon, 27 Aug 2012 00:18:43 +0000 (18:18 -0600)
committerZach Prezkuta <fermion@gmx.com>
Wed, 29 Aug 2012 02:12:41 +0000 (20:12 -0600)
include/bb2diaspora.php
include/bbcode.php

index f007417903b2ed7a9367417fc998fc44f3b06665..75fe1ef35dd02d7b5aa33d824927faba7811d2fb 100644 (file)
@@ -162,6 +162,22 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) {
        $md = new Markdownify(false, false, false);
        $Text = $md->parseString($Text);
 
+       // The Markdownify converter converts underscores '_' in URLs to '\_', which
+       // messes up the URL. Manually fix these
+       $count = 1;
+       $pos = bb_find_open_close($Text, '[', ']', $count);
+       while($pos !== false) {
+               $start = substr($Text, 0, $pos['start']);
+               $subject = substr($Text, $pos['start'], $pos['end'] - $pos['start'] + 1);
+               $end = substr($Text, $pos['end'] + 1);
+
+               $subject = str_replace('\_', '_', $subject);
+               $Text = $start . $subject . $end;
+
+               $count++;
+               $pos = bb_find_open_close($Text, '[', ']', $count);
+       }       
+
        // If the text going into bbcode() has a plain URL in it, i.e.
        // with no [url] tags around it, it will come out of parseString()
        // looking like: <http://url.com>, which gets removed by strip_tags().
index 6f22d1970257ac9d0f9d4700640c3f3cb4180aa9..c30908e2d48a18c3eebf31790fd9330ff08d5a28 100644 (file)
@@ -47,6 +47,30 @@ function bb_unspacefy_and_trim($st) {
   return $unspacefied;
 }
 
+function bb_find_open_close($s, $open, $close, $occurance = 1) {
+
+       if($occurance < 1)
+               $occurance = 1;
+
+       $start_pos = -1;
+       for($i = 1; $i <= $occurance; $i++) {
+               if( $start_pos !== false)
+                       $start_pos = strpos($s, $open, $start_pos + 1);
+       }
+
+       if( $start_pos === false)
+               return false;
+
+       $end_pos = strpos($s, $close, $start_pos);
+
+       if( $end_pos === false)
+               return false;
+
+       $res = array( 'start' => $start_pos, 'end' => $end_pos );
+
+       return $res;
+}
+
 function get_bb_tag_pos($s, $name, $occurance = 1) {
 
        if($occurance < 1)