Question

In my content I'm giving my <h3> tags id's for the sake of direct linking.

This is how it looks in the post editor:

<h3 id="h3-title">H3 Title</h3>

So that I can directly link to it like this:

<a href="http://example.com/page#h3-title">H3 Title</a>

However, the double quotes are getting escaped somehow, with the html output on the post page looking like this:

<h3 id="\"h3-title"\">H3 Title</h3>

This makes the links not work :(

I've tried numerous things, such as removing the wptexturize filter from the_content, making sure that magic_quotes were off, and even remove_filter('content_save_pre', 'wp_filter_post_kses'); which breaks things magnificently.

I'm seriously considering just creating a filter to remove the slashes, but it seems that they shouldn't have been added to begin with. They're not added to images with id's, for example, so they must be added somewhere. This happens in both visual and html modes.

Any help would be greatly appreciated.

Was it helpful?

Solution

I've noticed that if you uncheck the "prevent linking in heading tags (h1,h2,h3,h4,h5,h6)." in the settings of the SEO Smart Links plugin, the back slashes are removed. I've posted this on the plugin author's page to hopefully be fixed.

OTHER TIPS

Regarding to the SEO Smart links plugin.

It's caused by $text = stripslashes($text); in the following statement:

if ($options['excludeheading'] == "on") {
    //Here insert special characters
    $text = preg_replace('%(<h.*?>)(.*?)(</h.*?>)%sie', "'\\1'.removespecialchars('\\2').'\\3'", $text);
    $text = stripslashes($text);
}

You've probably fixed this already, but for those searching google for the answer to remove double escaped quotes in php, make sure the text is first filtered through stripslashes($data) function first.

For anyone that comes across this, the SEO Smart Links plugin can be fixed by modifying the SEOLinks_the_content_filter function.

Replace

$result=$this->SEOLinks_process_text($text, 0);

With

$text = stripslashes($text);
$result=$this->SEOLinks_process_text($text, 0);
$result = stripslashes($result);

I'm no php expert, no idea if this is the optimal fix, but it worked for me. This was a modified fix found on http://www.prelovac.com/vladimir/forum/plugins/seo-smart-links-fix-for-you-seo-smart-links-plugin

I'm thinking this may be a plugin interaction. I just created a simple test post on my WP website, and it did not escape the quotes. This is was on WordPress 2.9.1.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top