Page MenuHomePhabricator

MWExceptionRenderer.php doesn't always declare the encoding used
Closed, ResolvedPublic

Description

Seems like there is an encoding error

Screenshot-error-msg-2018-05-24.png (604×1 px, 38 KB)

From view-source

<h1>Siden har tekniske problemer.</h1><p>Prøv å oppdatere siden om noen minutter.</p><p><small>(Kan ikke kontakte databasetjeneren: <span dir="ltr">Cannot access the database: No working replica DB server: Unknown error (10.64.16.84:3318)</span>)</small></p><hr /><div style="margin: 1.5em">Du kan prøve å søke via Google imens.<br />
<small>Merk at deres indeks over våre sider kan være utdatert.</small>
</div>
<form method="get" action="//www.google.com/search" id="googlesearch">
	<input type="hidden" name="domains" value="https://no.wikipedia.org" />
	<input type="hidden" name="num" value="50" />
	<input type="hidden" name="ie" value="UTF-8" />
	<input type="hidden" name="oe" value="UTF-8" />
	<input type="text" name="q" size="31" maxlength="255" value="" />
	<input type="submit" name="btnG" value="Søk" />
	<p>
		<label><input type="radio" name="sitesearch" value="https://no.wikipedia.org" checked="checked" />Wikipedia</label>
		<label><input type="radio" name="sitesearch" value="" />WWW</label>
	</p>
</form>

From inspector (not shure how much of this is autogenerated)

<html><head></head><body><h1>Siden har tekniske problemer.</h1><p>Prøv å oppdatere siden om noen minutter.</p><p><small>(Kan ikke kontakte databasetjeneren: <span dir="ltr">Cannot access the database: No working replica DB server: Unknown error (10.64.16.84:3318)</span>)</small></p><hr><div style="margin: 1.5em">Du kan prøve å søke via Google imens.<br>
<small>Merk at deres indeks over våre sider kan være utdatert.</small>
</div>
<form method="get" action="//www.google.com/search" id="googlesearch">
	<input name="domains" value="https://no.wikipedia.org" type="hidden">
	<input name="num" value="50" type="hidden">
	<input name="ie" value="UTF-8" type="hidden">
	<input name="oe" value="UTF-8" type="hidden">
	<input name="q" size="31" maxlength="255" value="" type="text">
	<input name="btnG" value="Søk" type="submit">
	<p>
		<label><input name="sitesearch" value="https://no.wikipedia.org" checked="checked" type="radio">Wikipedia</label>
		<label><input name="sitesearch" value="" type="radio">WWW</label>
	</p>
</form><style type="text/css">
    /* loading */
    .lt-sk-three-bounce {
      margin: 2px auto;
      width: 100%;
      text-align: center; }
      .lt-sk-three-bounce .lt-sk-child {
        width: 5px;
        height: 5px;
        background-color: #333;
        border-radius: 100%;
        display: inline-block;
        -webkit-animation: lt-sk-three-bounce 1.4s ease-in-out 0s infinite both;
                animation: lt-sk-three-bounce 1.4s ease-in-out 0s infinite both; }
      .lt-sk-three-bounce .lt-sk-bounce1 {
        -webkit-animation-delay: -0.32s;
                animation-delay: -0.32s; }
      .lt-sk-three-bounce .lt-sk-bounce2 {
        -webkit-animation-delay: -0.16s;
                animation-delay: -0.16s; }

    @-webkit-keyframes lt-sk-three-bounce {
      0%, 80%, 100% {
        -webkit-transform: scale(0);
                transform: scale(0); }
      40% {
        -webkit-transform: scale(1);
                transform: scale(1); } }

    @keyframes lt-sk-three-bounce {
      0%, 80%, 100% {
        -webkit-transform: scale(0);
                transform: scale(0); }
      40% {
        -webkit-transform: scale(1);
                transform: scale(1); } }
  </style></body></html>

Seems like a lot is missing from the html code!

From console

The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol.

Event Timeline

matmarex subscribed.

(For context, this is about the error message shown during recent database issues, T195520)

This error page is generated by MWExceptionRenderer::reportOutageHTML(), and it seems it doesn't output a tag like <meta charset="UTF-8" /> (or any other part of the usual HTML header), so the browser guesses some incorrect legacy encoding. The content is definitely encoded in UTF-8, as everything else outputted by MediaWiki, but it's being interpreted wrong.

Change 435041 had a related patch set uploaded (by Strainu; owner: Strainu):
[mediawiki/core@master] MWExceptionRenderer: Fix db error outage page

https://gerrit.wikimedia.org/r/435041

Framawiki renamed this task from Encoding of error message to MWExceptionRenderer.php doesn't always declare the encoding used..May 24 2018, 8:39 PM

I should note that I personally considered this page as a fake when I first saw it, because of the encoding issues and Google search form. Users are used to a different level of polishing of pages.

Change 435041 abandoned by Strainu:
MWExceptionRenderer: Fix db error outage page

https://gerrit.wikimedia.org/r/435041

Based on the comments from the review, I believe we should consider a different approach and since I don't see this as a high priority issue, we can take the time to discuss it a bit.

Trying to understand the history of these errors, I found the commit that introduced MWExceptionRenderer.php, which mentions in the commit message "Lots of pointless prettification has been removed, but DBConnectionError still gets the usual special treatment of a fallback page and Google form." Going backwards through a bunch of refactorings brought me to this commit which seems to have introduced the Google form because "$wgSitename search is disabled for performance reasons". Does this still apply? Do we still need that Google search box or can we align all error pages to look the same (at least when we can't use wgOut)?

Also, @Krinkle suggested we should use wfHttpError. This would require a bit of refactoring to allow more complex HTML contents, but nothing dramatic. I see this is already used for the API usecase, so I am personally in favor of going on this path.

@Strainu Since it appears no one else is working on any refactoring, would you mind if I finished your patch and merged it?

No, please go ahead. Thank you.

Change 435041 restored by Bartosz Dziewoński:
MWExceptionRenderer: Fix db error outage page

https://gerrit.wikimedia.org/r/435041

Krinkle assigned this task to Strainu.

Change 435041 merged by jenkins-bot:
[mediawiki/core@master] MWExceptionRenderer: Fix db error outage page

https://gerrit.wikimedia.org/r/435041

Vvjjkkii renamed this task from MWExceptionRenderer.php doesn't always declare the encoding used. to 2bcaaaaaaa.Jul 1 2018, 1:08 AM
Vvjjkkii reopened this task as Open.
Vvjjkkii removed Strainu as the assignee of this task.
Vvjjkkii triaged this task as High priority.
Vvjjkkii updated the task description. (Show Details)
Vvjjkkii removed subscribers: gerritbot, Aklapper.
Mainframe98 renamed this task from 2bcaaaaaaa to MWExceptionRenderer.php doesn't always declare the encoding used..Jul 1 2018, 7:09 AM
Mainframe98 closed this task as Resolved.
Mainframe98 assigned this task to Strainu.
Mainframe98 raised the priority of this task from High to Needs Triage.
Mainframe98 updated the task description. (Show Details)
Mainframe98 added subscribers: gerritbot, Aklapper.

Change 489088 had a related patch set uploaded (by Reedy; owner: Strainu):
[mediawiki/core@REL1_31] MWExceptionRenderer: Fix db error outage page

https://gerrit.wikimedia.org/r/489088

Change 489090 had a related patch set uploaded (by Reedy; owner: Strainu):
[mediawiki/core@REL1_30] MWExceptionRenderer: Fix db error outage page

https://gerrit.wikimedia.org/r/489090

Reedy renamed this task from MWExceptionRenderer.php doesn't always declare the encoding used. to MWExceptionRenderer.php doesn't always declare the encoding used.Feb 7 2019, 10:30 PM

Change 489090 merged by Reedy:
[mediawiki/core@REL1_30] MWExceptionRenderer: Fix db error outage page

https://gerrit.wikimedia.org/r/489090

Change 489088 merged by jenkins-bot:
[mediawiki/core@REL1_31] MWExceptionRenderer: Fix db error outage page

https://gerrit.wikimedia.org/r/489088