Opened 21 months ago
Last modified 18 months ago
#18575 new defect (bug)
wptexturize modifies code inside tag attributes
| Reported by: |
|
Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | Awaiting Review |
| Component: | Formatting | Version: | 3.2 |
| Severity: | normal | Keywords: | has-patch |
| Cc: |
Description
In certain circumstances, wptexturize() will try to smart quote things inside attributes, screwing up the markup. For example:
[hello <a href="foo[bar]('baz')">world</a>
The tokenizer that generates $textarr will split the text like this:
0: [hello <a href="foo[bar]
1:('baz')">world
2:</a>
and so element 1 gets treated like non-tag text even though it's from an attribute. the easy fix is to not allow starting braces inside a brace set:
old:
$textarr = preg_split('/(<.*>|\[.*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
new:
$textarr = preg_split('/(<[^<]*>|\[[^\[]*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
this happens on trunk. code is in wp-includes/formatting.php. after the patch, the tokenizer works as intended:
0: [hello
1: <a href="foo[bar]('baz')">
2: world
3: </a>
Attachments (2)
Change History (6)
- Summary changed from wptexturize modified code inside tag attributes to wptexturize modifies code inside tag attributes
SergeyBiryukov — 21 months ago
comment:2
SergeyBiryukov — 21 months ago
- Keywords has-patch needs-unit-tests added
comment:3
SergeyBiryukov — 20 months ago
- Keywords needs-unit-tests removed
Note: See
TracTickets for help on using
tickets.

Related: #18549