Již dlouhou dobu používám Texy!
v několika webových projektech, které používají redakční systém
TextPattern. Na syntax Texy! jsem si
zvykl a líbí se mi, jak jednoduše dostanu XHTML validní kód. Už
v začátku jsem chtěl přepsat Texy! do dotnetu, abych ho mohl použít
i v mém redakčním systému Gryphoon. Jenže Texy! má velice rozsáhlé
zdrojové kódy a tak se mi do toho moc nechtělo, i když by to byla
velice zajímavá zkušenost. Jednoho krásného dne mě však napadlo, že by
bylo docela zajímavé udělat z Texy! webovou službu, ke které může
přistupovat v podstatě kdokoliv.
Nakonec jsem se rozhodl službu napsat sám a něco se přiučit v PHP (né že by
to byla moje priorita, ale každá zkušenost dobrá). Zjistil jsem, že PHP
4.x nemá podporu pro SOAP volání, tak jsem našel
knihovnu nuSOAP. Knihovna nuSOAP je univerzální
knihovnou jak pro WS klienty, tak pro WS servery. Jedinou podivností této
knihovny je, že z nějakého zvláštního důvodu převádí
UTF-8 na ISO-8859–1 a pak zpět, čímž dojde ke ztrátě znaků
s diakritikou.
Takže je potřeba v této knihovně udělat několik změn, aby
správně fungovala čeština. Nejprve je nutné upravit funkci
character_data ve třídě soap_parser.
Následující kód prostě zakomentujte:
if($this->decode_utf8) {
$data = utf8_decode($data);
}
Dále je potřeba nastavit kódování odchozí zprávy na UTF-8, to se
dělá v deklaracích třídy nusoap_base, řádek
var $soap_defencoding = 'ISO-8859-1';
Změňte na:
var $soap_defencoding = 'UTF-8';
Tím by měly být problémy se ztrátou českých znaků vyřešeny. Další
nutnou knihovnou je samotná knihovna Texy!. No a nyní se
dostáváme k tomu nejdůležitějšímu – službě samotné.
<?php
require_once("texy-compact.php");
require_once("nusoap.php");
$ns = "http://texy.info";
$server = new soap_server();
$server->configureWSDL('TexyConverter', $ns);
$server->wsdl->schemaTargetNamespace = $ns;
$server->register(
'PrevedDoXhtml',
array('text' => 'xsd:string'),
array('return' => 'xsd:string'),
$ns
);
$server->register(
'PrevedDoXhtmlR',
array('text' => 'xsd:string',
'utf' => 'xsd:boolean',
'trust' => 'xsd:boolean',
'headingLevel' => 'xsd:integer'
),
array('return' => 'xsd:string'),
$ns
);
function PrevedDoXhtml($text) {
$texy = &new Texy();
$texy->utf = true;
$texy->trustMode();
$texy->headingModule->top = 3;
$html = $texy->process($text);
return $html;
}
function PrevedDoXhtmlR($text, $utf, $trust, $headingLevel) {
$texy = &new Texy();
$texy->utf = $utf;
if($trust) $texy->trustMode();
else $texy->safeMode();
$texy->headingModule->top = $headingLevel;
$html = $texy->process($text);
return $html;
}
$server->service($HTTP_RAW_POST_DATA);
?>
Toť vše drazí čtenáři. Vlastně ještě ne, tohle je první
příspěvek na tomhle blogu, který je formátován pomocí Texy!