#18575 closed defect (bug) (worksforme)
wptexturize modifies code inside tag attributes
Reported by: | iamcal | Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | 3.2 |
Component: | Formatting | Keywords: | has-patch reporter-feedback |
Focuses: | 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 (8)
#1
@
13 years ago
- Summary changed from wptexturize modified code inside tag attributes to wptexturize modifies code inside tag attributes
#4
@
13 years ago
- Version changed from 3.3 to 3.2
Thanks for the test case. Could we make it be a valid href, or use a different attribute? This seems a bit off.
#5
@
11 years ago
- Keywords reporter-feedback added
- Milestone Awaiting Review deleted
- Resolution set to worksforme
- Status changed from new to closed
As I indicated two years ago, [hello <a href="foo[bar]('baz')">world</a>
just isn't a real-world enough test case to understand what is happening here. I'm going to close this for now.
Related: #18549