Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Link in HTML encoded #245

Open
pascalberger opened this issue Sep 13, 2022 · 8 comments · May be fixed by #262
Open

Link in HTML encoded #245

pascalberger opened this issue Sep 13, 2022 · 8 comments · May be fixed by #262
Labels
⚠️ Bug Something isn't working as expected

Comments

@pascalberger
Copy link
Contributor

pascalberger commented Sep 13, 2022

I've a link in a markdown file containing some URL parameters:

* [Test link](https://example.com?foo=bar&bar=foo

When HTML document is generated the link will be URL encoded, resulting in an invalid link:

<li><a href="https://example.com/?foo=bar&amp;amp;bar=foo">Test link</a></li>
@pascalberger
Copy link
Contributor Author

Might be a duplicate of #170 or part of what was discussed in #170, but not sure if this is supposed to be fixed with 9727372.

@daveaglick
Copy link
Member

Yeah, I could swear I worked on this exact thing not too long ago (though it's been a crazy summer for me, so it's also just as likely I'm thinking of something totally different).

I'm also wondering if the Markdown parser is getting in the middle and encoding it before I see it (or something related to that process on my end).

I'll take a look - I'm assuming you're on the latest version?

@daveaglick daveaglick added the ⚠️ Bug Something isn't working as expected label Sep 15, 2022
@pascalberger
Copy link
Contributor Author

I'll take a look - I'm assuming you're on the latest version?

Thanks! Yes, this is with a site built with Statiq.Web 1.0.0-beta.49

@pascalberger pascalberger linked a pull request Feb 4, 2023 that will close this issue
@pascalberger
Copy link
Contributor Author

I'm also wondering if the Markdown parser is getting in the middle and encoding it before I see it (or something related to that process on my end).

@daveaglick I can confirm that it is the Markdown parser which is responsible for the behavior. I created a test case in #262

@pascalberger
Copy link
Contributor Author

Related Markdig issue: xoofx/markdig#514

@pascalberger
Copy link
Contributor Author

pascalberger commented Feb 6, 2023

While CommonMark expects & in links to be rendered as &amp; and browsers would handle it, the problem here is that Statiq.Razor converts it to &amp;amp;.

Markdown:

[A link](https://example.com/?foo=bar&baz=123)

Expected HTML output:

<p>
  <a href="https://example.com/?foo=bar&amp;baz=123">
    A link
  </a>
</p>

Actual HTML output:

<p>
  <a href="https://example.com/?foo=bar&amp;amp;baz=123">
    A link
  </a>
</p>

I updated #262 to contain a test case, with an link as generated by Statiq.Markdown, which shows that Statiq.Razor renders the link invalid.

@pascalberger
Copy link
Contributor Author

pascalberger commented Feb 6, 2023

Issue is caused by the use of TagBuilder, which will encode the link a second time:

tagBuilder.MergeAttribute("href", document.GetLink(queryAndFragment, includeHost));

@pascalberger
Copy link
Contributor Author

@daveaglick Not sure what's the best way to proceed here: Currently Statiq.Markdown (Markdig) and Statiq.Razor (TagBuilder) are encoding. We need to get rid of one of those. There's no option for either Markdig or TagBuilder to not encode and would need additional code on either side.

IMHO best solution would be to not have it encoded in Statiq.Markdown in cases where Statiq.Razor runs afterwards in the pipeline, but not sure how this can be detected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
⚠️ Bug Something isn't working as expected
Development

Successfully merging a pull request may close this issue.

2 participants