On Thu, May 31, 2012 at 11:17 PM, Govinda <govinda.webdnatalk@xxxxxxxxx> wrote: >> >> You need to get better tools. I found this with Notepad++ for Windows >> searching "case" within *.php files filter within the root directory >> of the extracted zip/tarball: >> >> H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\CSS\Font.php >> (6 hits) >> Line 45: $lowercase_string = strtolower($string); >> Line 46: if (isset($system_fonts[$lowercase_string])) { >> Line 47: return $lowercase_string; >> Line 61: case 0: >> Line 77: case 1: >> Line 131: case 2: >> >> Haven't looked at the entire file or source code but that looks close >> enough to me... ;) > > Thanks a lot for taking a look Tommy, > > I do have a decent text editor I use to code with... and had searched for possible places where is the culprit strtolower() ... and so far no matter which instances(s) I comment out, I cannot seem to turn off the behavior of the library as a whole (either of them, or both) which is forcing the input CSS to lowercase. > Perhaps you should spend some time looking for a better text editor for your OS. :) When the current tools I use does not give satisfactory progress in what I'd like to do, I replace the tool(s). > For example, I also just tried the exact place you suggested: this one: > > [snip]htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\CSS\Font.php > > ...and changed line 45 to this: > > //$lowercase_string = strtolower($string);//Govinda hack > $lowercase_string = $string; > > but still no luck. > > >>> Have you tried http://htmlpurifier.org/phorum/ and did you noticed >>> "Since the project has been suspended, please only contact me if you >>> intend to continue maintaining it." for CSSTidy? > > I hadn't posted on http://htmlpurifier.org/phorum because last time I did that when I has also posted on stackoverlfow (SO), then the developer of HTMLpurifier scolded me for the dupe ;-) .. and he has already posted a comment on my (this new) SO post, saying just, "Hmm, that's silly of CSS Tidy. Maybe we should change that default.". I assume he probably has a lot on his plate, to the point that his answers are incredibly terse and not necessarily very helpful. > > I did see the message about CSStidy no longer being developed (if that is the meaning behind "suspended"). Yet when i was researching it, many people were still recommending it. No? Do you know/prefer something else for the purpose of cleaning user-input CSS bound for an external style sheet? > > Thanks > -Govinda Are you sure you fixed ALL of the offending lines containing strtolower? This is what Notepad++ returns when I search for "strtolower": Search "strtolower" (48 hits in 28 files) H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\CSS\Background.php (1 hits) Line 35: $bits = explode(' ', strtolower($string)); // bits to process H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\CSS\BackgroundPosition.php (1 hits) Line 80: $lbit = ctype_lower($bit) ? $bit : strtolower($bit); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\CSS\Color.php (1 hits) Line 17: $lower = strtolower($color); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\CSS\Font.php (1 hits) Line 45: $lowercase_string = strtolower($string); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\CSS\ListStyle.php (1 hits) Line 30: $bits = explode(' ', strtolower($string)); // bits to process H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\CSS\TextDecoration.php (1 hits) Line 19: $string = strtolower($this->parseCDATA($string)); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\CSS.php (2 hits) Line 51: $property = strtolower($property); Line 59: if (strtolower(trim($value)) !== 'inherit') { H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\Enum.php (2 hits) Line 7: * built-in strtolower and ctype_lower functions, which may Line 40: $string = ctype_lower($string) ? $string : strtolower($string); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\HTML\Color.php (1 hits) Line 17: if (isset($colors[strtolower($string)])) return $colors[$string]; H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\HTML\LinkTypes.php (1 hits) Line 39: $part = strtolower(trim($part)); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrDef\Lang.php (3 hits) Line 35: $subtags[0] = strtolower($subtags[0]); Line 50: if (!ctype_lower($subtags[1])) $subtags[1] = strtolower($subtags[1]); Line 62: $subtags[$i] = strtolower($subtags[$i]); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrTransform\EnumToCSS.php (1 hits) Line 44: if (!$this->caseSensitive) $value = strtolower($value); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\AttrTransform\Input.php (1 hits) Line 17: else $t = strtolower($attr['type']); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\Encoder.php (1 hits) Line 507: $lenc = strtolower($encoding); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\Filter\ExtractStyleBlocks.php (1 hits) Line 194: if ($y === '*' || isset($html_definition->info[$y = strtolower($y)])) { H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\HTMLModule.php (1 hits) Line 197: $content_model_type = strtolower(trim($content_model_type)); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\Length.php (1 hits) Line 62: if (!ctype_lower($this->unit)) $this->unit = strtolower($this->unit); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\Lexer\PH5P.php (8 hits) Line 328: 'name' => strtolower($char), Line 368: $next_node = strtolower($this->characters('A-Za-z', $this->char + 1)); Line 410: 'name' => strtolower($char), Line 479: $this->token['name'] .= strtolower($char); Line 525: 'name' => strtolower($char), Line 578: $this->token['attr'][$last]['name'] .= strtolower($char); Line 630: 'name' => strtolower($char), Line 848: } elseif(strtolower($this->character($this->char + 1, 7)) === 'doctype') { H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\Printer.php (2 hits) Line 138: if (!$five) $prefix = strtolower($prefix); Line 140: $lclass = strtolower($class); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\Token\Tag.php (2 hits) Line 37: $this->name = ctype_lower($name) ? $name : strtolower($name); Line 41: $new_key = strtolower($key); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\URI.php (1 hits) Line 20: $this->scheme = is_null($scheme) || ctype_lower($scheme) ? $scheme : strtolower($scheme); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\library\HTMLPurifier\VarParser.php (1 hits) Line 79: if ($type == self::ISTRING || $type == self::ITEXT) $var = strtolower($var); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\maintenance\PH5P.php (8 hits) Line 266: 'name' => strtolower($char), Line 306: $next_node = strtolower($this->characters('A-Za-z', $this->char + 1)); Line 348: 'name' => strtolower($char), Line 417: $this->token['name'] .= strtolower($char); Line 463: 'name' => strtolower($char), Line 516: $this->token['attr'][$last]['name'] .= strtolower($char); Line 568: 'name' => strtolower($char), Line 785: } elseif(strtolower($this->character($this->char + 1, 7)) === 'doctype') { H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\maintenance\update-freshmeat.php (1 hits) Line 110: else $method .= '_' . strtolower($v); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\plugins\phorum\config.default.php (1 hits) Line 53: if (strtolower($GLOBALS['PHORUM']['DATA']['CHARSET']) !== 'utf-8') { H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\plugins\phorum\settings\migrate-sigs.php (1 hits) Line 7: if (!isset($_POST['confirmation']) || strtolower($_POST['confirmation']) !== 'yes') { H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\tests\common.php (1 hits) Line 104: $lopt = strtolower($opt); H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\tests\HTMLPurifier\Harness.php (1 hits) Line 80: if (strtolower(substr($method, 0, 10)) == '__onlytest') { Given the above filenames, that pretty much takes care of all CSS... Searching without file filters gives this in addition to above: Search "strtolower" (51 hits in 30 files) H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\docs\dev-code-quality.txt (1 hits) Line 13: a lot of strtolower() calls, no legit casing H:\data\Downloads\dev\PHP\htmlpurifier-4.4.0\docs\enduser-utf8.html (2 hits) Line 1006: <li>...convert case (strtolower, strtoupper, ucfirst, ucwords)</li> Line 1019: <code>strtolower</code> (HTML Purifier uses this function.)</p> Those above 2 filenames seems rather interesting... Then there's the csstidy search for strtolower: Search "strtolower" (12 hits in 4 files) H:\data\Downloads\dev\PHP\csstidy-1.3\class.csstidy.php (3 hits) Line 706: $this->selector = strtolower($this->selector); Line 708: $this->property = strtolower($this->property); Line 977: $istring = strtolower(trim(substr($istring,0,$pos))); H:\data\Downloads\dev\PHP\csstidy-1.3\class.csstidy_optimise.php (6 hits) Line 300: if(strtolower(substr($color,0,4)) == 'rgb(') Line 325: if(isset($replace_colors[strtolower($color)])) Line 327: $color = $replace_colors[strtolower($color)]; Line 333: $color_temp = strtolower($color); Line 340: switch(strtolower($color)) Line 408: if (strpos(strtolower($temp[$l]),$units[$m]) !== FALSE) H:\data\Downloads\dev\PHP\csstidy-1.3\class.csstidy_print.php (2 hits) Line 169: if($this->parser->get_cfg('lowercase_s')) $token[1] = strtolower($token[1]); Line 176: if($this->parser->get_cfg('case_properties') == 1) $token[1] = strtolower($token[1]); H:\data\Downloads\dev\PHP\csstidy-1.3\lang.inc.php (1 hits) Line 6: $l = strtolower(substr($l,0,2)); HTH, Tommy -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php