Gerrit Patch Uploader has uploaded a new change for review. https://gerrit.wikimedia.org/r/286385
Change subject: Do not double decode HTML entities for IDs ...................................................................... Do not double decode HTML entities for IDs * in links (T103714) * in indicators (T104196) This change removes the automatic Sanitizer::decodeCharReferences from Sanitizer::escapeId. Where decoding of HTML entities are wanted an explicite call to Sanitizer::decodeCharReferences is added. Also add 'noninitial' where the first character is always a letter. Explicit decode HTML entities in non local autocomments. (T104311) Bug: T103714 Bug: T104196 Bug: T104311 Change-Id: I88e8e2077e6f5eec2b232391f7818370894a62dc --- M includes/Linker.php M includes/Sanitizer.php M includes/api/ApiMain.php M includes/parser/Parser.php M includes/skins/BaseTemplate.php M includes/specials/SpecialListgrouprights.php M includes/specials/SpecialVersion.php M includes/specials/pagers/AllMessagesTablePager.php 8 files changed, 15 insertions(+), 9 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/85/286385/1 diff --git a/includes/Linker.php b/includes/Linker.php index 071f95e..7228f89 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -1357,7 +1357,7 @@ $sectionTitle = Title::newFromText( '#' . $section ); } else { $sectionTitle = Title::makeTitleSafe( $title->getNamespace(), - $title->getDBkey(), $section ); + $title->getDBkey(), Sanitizer::decodeCharReferences( $section ) ); } if ( $sectionTitle ) { $link = Linker::makeCommentLink( $sectionTitle, $wgLang->getArrow(), $wikiId, 'noclasses' ); diff --git a/includes/Sanitizer.php b/includes/Sanitizer.php index d321e9f..a80b683 100644 --- a/includes/Sanitizer.php +++ b/includes/Sanitizer.php @@ -1132,8 +1132,6 @@ global $wgExperimentalHtmlIds; $options = (array)$options; - $id = Sanitizer::decodeCharReferences( $id ); - if ( $wgExperimentalHtmlIds && !in_array( 'legacy', $options ) ) { $id = preg_replace( '/[ \t\n\r\f_\'"&#%]+/', '_', $id ); $id = trim( $id, '_' ); diff --git a/includes/api/ApiMain.php b/includes/api/ApiMain.php index 07642c4..a3c8ec0 100644 --- a/includes/api/ApiMain.php +++ b/includes/api/ApiMain.php @@ -1632,7 +1632,7 @@ $header = $this->msg( 'api-help-datatypes-header' )->parse(); $help['datatypes'] .= Html::rawElement( 'h' . min( 6, $level ), [ 'id' => 'main/datatypes', 'class' => 'apihelp-header' ], - Html::element( 'span', [ 'id' => Sanitizer::escapeId( 'main/datatypes' ) ] ) . + Html::element( 'span', [ 'id' => Sanitizer::escapeId( 'main/datatypes', 'noninitial' ) ] ) . $header ); $help['datatypes'] .= $this->msg( 'api-help-datatypes' )->parseAsBlock(); @@ -1651,7 +1651,7 @@ $header = $this->msg( 'api-credits-header' )->parse(); $help['credits'] .= Html::rawElement( 'h' . min( 6, $level ), [ 'id' => 'main/credits', 'class' => 'apihelp-header' ], - Html::element( 'span', [ 'id' => Sanitizer::escapeId( 'main/credits' ) ] ) . + Html::element( 'span', [ 'id' => Sanitizer::escapeId( 'main/credits', 'noninitial' ) ] ) . $header ); $help['credits'] .= $this->msg( 'api-credits' )->useDatabase( false )->parseAsBlock(); diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index a1d62e5..4ee519b 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -4596,6 +4596,9 @@ # Save headline for section edit hint before it's escaped $headlineHint = $safeHeadline; + # Decode HTML entities + $safeHeadline = Sanitizer::decodeCharReferences( $safeHeadline ); + if ( $wgExperimentalHtmlIds ) { # For reverse compatibility, provide an id that's # HTML4-compatible, like we used to. @@ -6149,6 +6152,7 @@ # Strip out wikitext links(they break the anchor) $text = $this->stripSectionName( $text ); $text = Sanitizer::normalizeSectionNameWhitespace( $text ); + $text = Sanitizer::decodeCharReferences( $text ); return '#' . Sanitizer::escapeId( $text, 'noninitial' ); } @@ -6164,6 +6168,7 @@ # Strip out wikitext links(they break the anchor) $text = $this->stripSectionName( $text ); $text = Sanitizer::normalizeSectionNameWhitespace( $text ); + $text = Sanitizer::decodeCharReferences( $text ); return '#' . Sanitizer::escapeId( $text, [ 'noninitial', 'legacy' ] ); } diff --git a/includes/skins/BaseTemplate.php b/includes/skins/BaseTemplate.php index 3408db3..22774ee 100644 --- a/includes/skins/BaseTemplate.php +++ b/includes/skins/BaseTemplate.php @@ -626,7 +626,7 @@ $out .= Html::rawElement( 'div', [ - 'id' => Sanitizer::escapeId( "mw-indicator-$id" ), + 'id' => Sanitizer::escapeId( "mw-indicator-$id", 'noninitial' ), 'class' => 'mw-indicator', ], $content diff --git a/includes/specials/SpecialListgrouprights.php b/includes/specials/SpecialListgrouprights.php index d64306b..f419fba 100644 --- a/includes/specials/SpecialListgrouprights.php +++ b/includes/specials/SpecialListgrouprights.php @@ -124,7 +124,7 @@ ? $groupsRemoveFromSelf[$group] : []; - $id = $group == '*' ? false : Sanitizer::escapeId( $group ); + $id = $group == '*' ? false : Sanitizer::escapeId( $group, 'noninitial' ); $out->addHTML( Html::rawElement( 'tr', [ 'id' => $id ], " <td>$grouppage$grouplink</td> <td>" . diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php index ce5cbeb..99df824 100644 --- a/includes/specials/SpecialVersion.php +++ b/includes/specials/SpecialVersion.php @@ -830,7 +830,7 @@ // Finally! Create the table $html = Html::openElement( 'tr', [ 'class' => 'mw-version-ext', - 'id' => Sanitizer::escapeId( 'mw-version-ext-' . $extension['name'] ) + 'id' => Sanitizer::escapeId( 'mw-version-ext-' . $extension['name'], 'noninitial' ) ] ); diff --git a/includes/specials/pagers/AllMessagesTablePager.php b/includes/specials/pagers/AllMessagesTablePager.php index 2f2cbc2..4666b19 100644 --- a/includes/specials/pagers/AllMessagesTablePager.php +++ b/includes/specials/pagers/AllMessagesTablePager.php @@ -377,7 +377,10 @@ } if ( !$isSecond ) { - $arr['id'] = Sanitizer::escapeId( 'msg_' . $this->getLanguage()->lcfirst( $row->am_title ) ); + $arr['id'] = Sanitizer::escapeId( + 'msg_' . $this->getLanguage()->lcfirst( $row->am_title ), + 'noninitial' + ); } return $arr; -- To view, visit https://gerrit.wikimedia.org/r/286385 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I88e8e2077e6f5eec2b232391f7818370894a62dc Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Gerrit Patch Uploader <gerritpatchuploa...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits