Premise
Ben, örneğin, HTML Purifier <body>
elemanı inline stil korumak için, <div>
etiketleri <body>
etiketleri dönüştürmek için kullanmak istiyorum <body style="background:color#000000;">Hi there.</body>
<div style="background:color#000000;">Hi there.</div>
açacak. Ben bir custom tag bir kombinasyonu ve bir TagTransform
sınıfına bakıyorum.
Current setup
Benim yapılandırma bölümünde, şu anda bu yapıyorum:
$htmlDef = $this->configuration->getHTMLDefinition(true);
// defining the element to avoid triggering 'Element 'body' is not supported'
$bodyElem = $htmlDef->addElement('body', 'Block', 'Flow', 'Core');
$bodyElem->excludes = array('body' => true);
// add the transformation rule
$htmlDef->info_tag_transform['body'] = new HTMLPurifier_TagTransform_Simple('div');
... Yanı izin <body>
ve style
(ve class
, ve id
) yapılandırma direktifleri aracılığıyla niteliği (onlar ' HTML.AllowedElements
ve ayrıştırılır olan bir çalışma, büyük bir liste kapsamında re HTML.AllowedAttributes
).
Ben tanımı önbelleğe kapalı ettik.
$config->set('Cache.DefinitionImpl', null);
Ne yazık ki, bu kurulum, bu HTMLPurifier_TagTransform_Simple
denilen transform()
yöntemi asla gibi görünüyor.
HTML.Parent?
Ben oldukça doğal, <div>
bir çocuk <body>
elemanı izin vermez, beri 'div'
ayarlanmış olan, suçlu benim HTML.Parent
olduğunu tahmin . Ancak, HTML.Parent
ayarını 'html'
beni ağlar:
ErrorException: ebeveyn olarak tanınmayan bir öğe kullanamazsınız
Ekleme ...
$htmlElem = $htmlDef->addElement('html', 'Block', 'Flow', 'Core');
$htmlElem->excludes = array('html' => true);
... Bu hata mesajı kurtulur ama yine etiketi dönüşümü değil - bunun yerine kaldırılır.
Ekleme ...
$htmlElem = $htmlDef->addElement('html', 'Block', 'Custom: head?, body', 'Core');
$htmlElem->excludes = array('html' => true);
Bana bir hata mesajı aciklamalar çünkü ... Ayrıca, hiçbir şey yok:
ErrorException: Trying to get property of non-object
[...]/library/HTMLPurifier/Strategy/FixNesting.php:237
[...]/library/HTMLPurifier/Strategy/Composite.php:18
[...]/library/HTMLPurifier.php:181
[...]
Ben hala sağlamak için gereken kesin sözdizimi anlamaya çalışıyorum, artık son seçenek etrafında titriyor, ama birisi kendi geçmiş deneyimlerine dayanarak bana yardımcı bilir, ben doğru yönde herhangi bir işaretçiler takdir ediyorum.
HTML.TidyLevel?
Yalnızca diğer suçlu olarak ben, benim HTML.TidyLevel
'heavy'
ayarlandığında olmak hayal edebilirsiniz. Ben bu konuda tüm olası takımyıldızları denemek için henüz ettik, ancak bugüne kadar, bu hiçbir fark yapıyor.
(Ben sadece ikincil bu dokunmadan oldum beri, ben onları burada listelemek istiyorum diye, ben zaten denedim hangi takımyıldızları hatırlamak için mücadele, ama olduğu gibi ben yaptım bir şey kaçırmak ya da bir şey misreport olmaz güven eksikliği Ben bazı özel test yaptık ne zaman. Gerçi daha sonra bu bölümü düzenlemek olabilir!)
Full Configuration
Benim yapılandırma verileri JSON saklanır ve daha sonra HTML Arıtma ayrıştırılır. İşte dosya:
{
"CSS" : {
"MaxImgLength" : "800px"
},
"Core" : {
"CollectErrors" : true,
"HiddenElements" : {
"script" : true,
"style" : true,
"iframe" : true,
"noframes" : true
},
"RemoveInvalidImg" : false
},
"Filter" : {
"ExtractStyleBlocks" : true
},
"HTML" : {
"MaxImgLength" : 800,
"TidyLevel" : "heavy",
"Doctype" : "XHTML 1.0 Transitional",
"Parent" : "html"
},
"Output" : {
"TidyFormat" : true
},
"Test" : {
"ForceNoIconv" : true
},
"URI" : {
"AllowedSchemes" : {
"http" : true,
"https" : true,
"mailto" : true,
"ftp" : true
},
"DisableExternalResources" : true
}
}
(URI.Base
, URI.Munge
ve Cache.SerializerPath
de ayarlanır, ama bu macun onları kaldırdık Ayrıca, HTML.Parent
ihtar:. As söz konusu, genellikle bu 'div'
ayarlanır.)