PDA

View Full Version : Trying to fix QUOTES from Invision import


pattycake
01-12-2014, 06:48 PM
All of the previous quotes in my posts from my Invision import are fubarred. I have found several methods that use preg_replace to fix the post, but none of them have converted anything. The problem is, I don't know enough php to understand the preg_replace statements so I can fix the posts.

Here is one I pulled from a program called QuoteFix.php
function translatesmilies($text) {
$text = preg_replace('#<!--QuoteBegin-{1,2}([^"]*)\+-->([^"]*)<!--QuoteEBegin-->#si', "[quote]Originally posted by \\1\n", $text);
$text = preg_replace('#<!--QuoteBegin-{1,2}([^"]*)\+([^"]*)-->([^"]*)<!--QuoteEBegin-->#si', "[quote]Originally posted by \\1@\\2\n[b]", $text);
$text = preg_replace('#<img src=\'([^"]*)\' border=\'0\' alt=\'user posted image\'(\s/)?>#siU', '\\1', $text);
return $text;
}


Here is an actual post with a quote, as it's stored in the database:
<table align="center" border="0" cellpadding="3" cellspacing="1" width="95%">
<tbody><tr><td>
[B]QUOTE (JSK @ Sep 25 2013, 09:09 PM)</td></tr>
<tr><td id="QUOTE"><!--QuoteEBegin--> <!--QuoteBegin-gmoss+Sep 25 2013, 03:52 PM-->
<table align="center" border="0" cellpadding="3" cellspacing="1" width="95%">
<tbody><tr><td>QUOTE (gmoss @ Sep 25 2013, 03:52 PM)</td></tr><tr><td id="QUOTE"><!--QuoteEBegin--> on a small bore 2 stroke, it hurts me as much as helps. <!--QuoteEnd--></td></tr>
</tbody>
</table><!--QuoteEEnd-->
I agree and wouldn't put one on my small bore 2-stroke, the clutch/rider relationship is too intimate. However if I was on a kick-start only 4-stroke I might consider one. <!--QuoteEnd-->
</td></tr>
</tbody>
</table> <!--QuoteEEnd-->
Not sure I understand this.
The Rekluse does not change the rider/clutch relationship at all, except when you get below say 2500 rpms. No small bore bike is going to be making any power that low anyway. You can slip the clutch normally.

If I run the above preg_replace, it doesn't find anything to change.
I have tried to undestand the preg_replace statements but for the life of me, I just don't standstand the syntax.

Any help would be appreciated.

Max Taxable
01-12-2014, 07:01 PM
Not sure but I think you might instead want a db query for this.

pattycake
01-12-2014, 07:24 PM
i was just trying to do a quick test by assigning the data that was in the database to a var, and then running the preg_replace on that var so I can see before and after. I do a $test= on that data in the box up above and then do the preg_replace on $test


what exactly does this preg_replace do?
$text = preg_replace('#<!--QuoteBegin-->([^"]*)<!--QuoteEBegin-->#siU', '[quote][b]', $text);

I understand the # delimiters, but not that stuff inside the [], or the siU at the end, or the two QuoteBegin and QuoteEBegin.... why are there two of them?

I do know that if I try to run this on my var, it doesn't change anything.

same for this one:
$text = preg_replace('#<!--QuoteBegin-{1,2}([^"]*)\+-->([^"]*)<!--QuoteEBegin-->#si', "[quote]Originally posted by \\1\n[b]", $text);

what does that {1,2} thingie?

kh99
01-12-2014, 07:30 PM
Well, it look like the patterns are trying to match <!--QuoteBegin-some stuff--><!--QuoteEBegin-->, but in the post the QuoteEBegin comes first (I have no idea what any of that stuff means so I can't say why that would be).

You say that post is from the database - which column? I'm wondering why it has html in it (normally the posts in the database have bbcode tags).

kh99
01-12-2014, 07:35 PM
I understand the # delimiters, but not that stuff inside the [], or the siU at the end, or the two QuoteBegin and QuoteEBegin.... why are there two of them?
...

what does that {1,2} thingie?

You might want to look at this: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
[...] = "character class" (the ^ negates it), {1,2} = "repetition", and siU are "internal options settings".


ETA: .. and this: http://www.php.net/manual/en/function.preg-replace.php

pattycake
01-12-2014, 07:43 PM
Well, it look like the patterns are trying to match <!--QuoteBegin-some stuff--><!--QuoteEBegin-->, but in the post the QuoteEBegin comes first (I have no idea what any of that stuff means so I can't say why that would be).

You say that post is from the database - which column? I'm wondering why it has html in it (normally the posts in the database have bbcode tags).

it is the "post" column in the ibf_posts table - the database is from a very old version of Invision - apparently, even though HTML was turned off, thats the way they store the actual post. I believe they used macros to convert things like <!--QuoteEBegin--> on the fly.

hmmmm... maybe thats where I should be looking... at those "on-the-fly" conversions that the Invision software used

kh99
01-12-2014, 07:47 PM
it is the "post" column in the ibf_posts table - the database is from a very old version of Invision - apparently, even though HTML was turned off, thats the way they store the actual post.

Oh, I see. I thought you already had them in the vbulletin database.

pattycake
01-12-2014, 07:55 PM
well, yes, I do... i copied them straight from the invision table into the posts table of vbulletin.

In the Invision table, it was ibf_posts, column name post
In the vbulletin table, it is vb_kt_post, column name pagetext

I know... bad move to do a direct copy but I did it so now I have a mess to clean up.

--------------- Added 1389560223 at 1389560223 ---------------

I went inside the Invision code, in a program called post_parser.php

In that code, I found the following:

$txt = preg_replace( "#<!--QuoteBegin-->(.+?)<!--QuoteEBegin-->#" , '[QUOTE]' , $txt );
$txt = preg_replace( "#<!--QuoteBegin-{1,2}([^>]+?)\+([^>]+?)-->(.+?)<!--QuoteEBegin-->#" , "[QUOTE=\\1,\\2]" , $txt );
$txt = preg_replace( "#<!--QuoteBegin-{1,2}([^>]+?)\+-->(.+?)<!--QuoteEBegin-->#" , "[QUOTE=\\1]" , $txt );


there's another line for QuoteEEnd but it won't paste into the code above

I think this is the key to a correct conversion.

--------------- Added 1389562663 at 1389562663 ---------------

I got it... I used that exact code that was in the post_parser.php and, it converted it clean as a whistle... removed all the TABLE stuff, TD stuff, etc, and made it work as vbulletin expects.

Case Closed,
Ticket-be-gone
We-be-happy

-pat-

--------------- Added 1389593985 at 1389593985 ---------------

Well crud... I [thought] I had it... the quotes are definitely fixed, but now I have another friggin preg_replace statement

here is what needs to be converted:
<img src='http://img2.timg.co.il/forums/1_172631546.JPG' border='0' alt='user posted image' />

here is my preg-replace:
$txt = preg_replace( "#<img src=[\"'](\S+?)['\"].+?".">#" , "\\\1\[/IMG\]"

and here is what it renders:
[IMG]'http://img2.timg.co.il/forums/1_172631546.JPG

Notice that apostrophe right after the first ] just before the http?
If I get rid of that booger, it'll be clean.

Teach me, guide me Grasshopper...

.