Na GOG.com běží Spring Sale. Při té příležitosti lze získat zdarma počítačovou hru Lorelai (ProtonDB).
Curl, řádkový nástroj a knihovna pro přenos dat po různých protokolech, slaví 25 let. Vydána byla nová verze 8.0.0. Mimo jiné řeší 6 zranitelností.
V sobotu 25. března proběhne Arduino Day 2023. Od 14:00 lze sledovat oficiální stream. Zúčastnit se lze i lokálních akcí. V Česku jsou aktuálně registrovány dvě: v Praze na Matfyzu a v Poličce v městské knihovně.
Fabrice Bellard, tvůrce FFmpeg nebo QEMU, představil TextSynth Server. Jedná se o webový server nabízející REST API k velkým AI jazykovým modelům. CPU verze je k dispozici zdarma jako binárka pod licencí MIT. GPU verze je komerční. Vyzkoušet lze na stránkách TextSynth.
Na konferenci LibrePlanet 2023 byly vyhlášeny ceny Free Software Foundation. Oceněni byli Eli Zaretskii za dlouhodobé příspěvky (správce Emacsu), Tad „SkewedZeppelin“ za nové příspěvky (správce DivestOS, distribuce Androidu) a projekt GNU Jami za společenský přínos.
Projekt Libreboot (Wikipedie) vydal novou verzi 20230319 svého svobodného firmwaru nahrazujícího proprietární BIOSy. Přibyla například podpora Lenovo ThinkPadů W530 a T530. Libreboot je distribucí Corebootu bez proprietárních blobů.
Na YouTube jsou k dispozici videozáznamy z 20. konference SCALE (Southern California Linux Expo). Závěrečnou přednášku měl dnes již osmdesátiletý Ken Thompson. Na otázku, jaký operační systém používá, odpověděl: "Většinu svého života jsem používal Apple, protože jsem se do této společnosti tak trochu narodil. Poslední dobou, myslím posledních pět let, jsem ale kvůli Applu více a více depresivní. To, co dělá s něčím, co by vám mělo umožnit
… více »Byla vydána verze 10.00 linuxové distribuce SystemRescue, původně SystemRescueCd, určené pro záchranu systémů a dat. Přehled novinek v changelogu. Linux byl povýšen na verzi 6.1.20.
Byla vydána verze 16.0.0 překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, LLD, Extra Clang Tools, Libc++ a Polly.
O víkendu probíhá v Bostonu, a také virtuálně, konference LibrePlanet 2023 organizovaná nadací Free Software Foundation (FSF).
$from ='05/17/2012 10:15:00'; $to ='05/17/2012 10:30:00'; $day ='5/17/2012'; echo '{ "dtstart": "'.$from.'", "dtend": "'.$to.'", "day": "'.$day.'" },';tak to fičí ok, ale akonáhle pred to dám hocijakú funkciu, tak to ajax nespracuje, napr. toto (prepíšem na konci tie isté premenné čo v prvom skripte, ale aj tak to nejde dobre):
$from= preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->time_from); $to = preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->time_to); $day = preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->day); $from ='05/17/2012 10:15:00'; $to ='05/17/2012 10:30:00'; $day ='5/17/2012'; echo '{ "dtstart": "'.$from.'", "dtend": "'.$to.'", "day": "'.$day.'" },';
$data
$from, $to, $date
by se mely stejne priradit rucne definovane hodnoty, takze problem bude spise v tom, ze tam dojde k nejake notice/warning nebo tak neco, co pak rozbije ten vystup..
Array( [0] => array ( [id] => 24 [time_from] => 05/17/2012 10:15:00 [time_to] => 05/17/2012 11:30:00 [day] => 05/17/2012 ) )
<?php class Data{ public $time_from = '05/17/2012 10:15:00'; public $time_to ='05/17/2012 10:30:00'; public $day ='05/17/2012'; }; $data = Array(0 => new Data()); $from= preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->time_from); $to = preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->time_to); $day = preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->day); echo '{ "dtstart": "'.$from.'", "dtend": "'.$to.'", "day": "'.$day.'" },';jako byste přímo zapsal toto:
,
na konci toho výpisu. Zkusil bych ji dát pryč, co to udělá.
Array( [0] => stdClass Object ( [id] => 24 [time_from] => 05/17/2012 10:15:00 [time_to] => 05/17/2012 11:30:00 [day] => 05/17/2012 ) )v čom by tam mohol byť do kelu problém?
echo json_encode(array("dtstart"=>$from,"dtend"=>$to,"day"=>$day));
eval()
, která si s těmi zpětnými lomítky hravě poradí.
json_encode()
přidává uvozovky, podstrčený kód se tedy předá jako řetězec.
{ "dtstart": "05/17/201210: 15: 00", "dtend": "05/17/201210: 30: 00", "day": "05/17/2012" }v pořádku. Že by zase nějaká JSON obskurnost?
<![CDATA[ … ]]>
json_encode()
si s tím musí umět poradit tak, abych při json_decode()
dostal identická data.
Když ukládám data do DB, tak je také nesmím escapovat, abych je měl v DB přesně byte po bytu tak, jak je tam potřebuji mít.
json_decode()
a pak htmlspecialchars()
. V HTML nemá JSON co pohledávat.
<script> <?php echo json_encode(array("dtstart"=>"<![CDATA[","dtend"=>"05/17/2012 10:15:00")); ?> </script>nebo
<script> <?php echo json_encode(array("dtstart"=>"<script>","dtend"=>"05/17/2012 10:15:00")); ?> </script>což mi rozbije výstup. Případně když budu vypisovat jinam (atribut, jiný formát), může se tam rozbít něco jiného. Proto je potřeba, aby escapoval ten, kdo ví*, kam se vypisuje. A tudíž je to polovičaté escapování ve funkci
json_encode()
nadbytečné a povede akorát ke zmatkům a chybám – stejně jako ty PHP Magic Quotes – programátoři se budou spoléhat na to, že můžou jen tak přilepit návratovou hodnotu funkce do výstupu a nebudou ji escapovat a špatně dopadnou.
Ta funkce má i volby – trochu by pomohla JSON_HEX_TAG
, která zneškodní ty < >, ale stále tam zbudou & a ty budou dělat neplechu (neexistující entity). Takže je potřeba přidat ještě JSON_HEX_AMP
. A už to není tak jednoduché a možná tam jsou i další díry…
Je to takový neunixový přístup, jedna funkce se toho snaží dělat příliš mnoho a nakonec to dělá blbě. Daleko lepší mi přijde to rozdělit – mít jednu spolehlivou funkci na generování JSONu a jinou spolehlivou funkci na escapování (pro různé výstupní formáty) a tyto dvě funkce zřetězit:
$výstup = bezpečněEscapujProDanýVýstupníFormát(generujNějakáData($vstup));*) což může být programátor, který zavolá patřičnou funkci, nebo třeba nějaký inteligentní šablonovací systém, který zná kontext.
<script> <?php echo htmlspecialchars(json_encode(array("dtstart"=>"&<![CDATA[","dtend"=>"05/17/2012 10:15:00"))); ?> </script>
bezpečněEscapujProDanýVýstupníFormát()
. Jenže pak je nějaké přidávání zpětného lomítka před / zbytečnost a nemá tam co dělat – akorát to někoho svede k chybě.
*) relativně – zase to zbytečně převádí " na ", přestože uvozovky v textových uzlech (uvnitř elementů) klidně být můžou a je potřeba je převádět jen v atributech – a to ještě jen v těch, kde je hodnota zavřená do uvozovek – zatímco v <element atribut='nějaká "hodnota" s uvozovkami'/>
klidně být můžou.
Tiskni
Sdílej: