Если Вы URLEncode строка прежде, чем добавить его к URL, у Вас не будет ни одной из тех проблем (автоматический URLDecode возвратит его исходному состоянию).
Думаю, вы собираетесь написать свой собственный синтаксический анализатор и фильтр CSS, поэтому вот что я хотел бы рассмотреть, хотя я никогда не делал ничего подобного:
цвет
, font-family
. background
, по крайней мере, в начало, так что вы можете легко проанализировать значения. Требовать, чтобы они явно писали background-color
, background-image
. Самой сложной частью анализа будет анализ сложных селекторов CSS . Но вы также можете наложить здесь свое собственное подмножество.
Вот некоторый (псевдокод), возможно, он вам как-то поможет:
<?php
function tokenizeCSS() {
return array(
array(
'selector' => '#foo .bar',
'properties' => array(
'background-color' => 'transparent',
'color' => '#fff',
),
);
);
}
function colorValidator($color)
{}
/**
* This is basically the white list. Keys are accepted CSS properties
* and values are the validator callbacks.
*/
$propertyValidators = array(
'background-color' => 'colorValidator',
'color' => 'colorValidator',
);
$filteredRules = array();
foreach (tokenizeCSS() as $rule) {
if (! validSelector($rule['selector'])) {
continue;
}
foreach ($rule['properties'] as $property => $value) {
/**
* Check property is in white list
*/
if (! isset($propertyValidators[$property]) {
continue;
}
/**
* Check property is valid
*/
if (! $propertyValidators[$property]($value)) {
continue;
}
/**
* Valid rule
*/
$filteredRules[$rule['selector']][$property] = $value;
}
}