Oznámení
Geshi
před 14 lety
- Pepino
- Člen | 21
mam mensi problem mam tenhle kod
<?php
/**
* -----------------------------------------
* TEXY! THIRD PARTY SYNTAX HIGHLIGHTING
* -----------------------------------------
*
* Copyright (c) 2003-2005, David Grudl <dave@dgx.cz>. All rights reserved.
* Web: https://texy.info/
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
/**
* This demo shows how combine Texy! with syntax highlighter GESHI
* - define user callback (for /--code elements)
* - load language, highlight and return stylesheet + html output
*/
// check required version
if (version_compare(phpversion(), '4.3.3', '<'))
die('Texy! requires PHP version 4.3.3 or higher');
$texyPath = '/texy/';
$geshiPath = dirname(__FILE__).'/texy/geshi/';
// include libs
require_once('./texy/texy.php');
include_once('./texy/geshi/geshi.php');
if (!class_exists('Geshi'))
die('DOWNLOAD <a href="http://qbnz.com/highlighter/">GESHI</a> AND UNPACK TO GESHI FOLDER FIRST!');
// this is user callback function for processing blocks
//
// /---code lang
// ......
// ......
// \---
//
// $element is TexyCodeBlockElement object
// $element->content - content of element
// $element->htmlSafe - is content HTML safe?
// $element->tag - parent HTML tag, default value is 'pre'
// $element->type - type of content: code | samp | kbd | var | dfn (or empty value)
// $element->lang - language (optional)
//
// Syntax highlighter changes $element->content and sets $element->htmlSafe to true
//
function asa(&$element) {
global $geshiPath;
if ($element->lang == 'html') $element->lang = 'html4strict';
$geshi = new GeSHi($element->content, $element->lang, $geshiPath.'geshi/');
if ($geshi->error) // GeSHi could not find the language, nothing to do
return;
// do syntax-highlighting
$geshi->set_encoding($element->texy->utf ? 'UTF-8' : 'ISO-8859-1');
$geshi->set_header_type(GESHI_HEADER_PRE);
$geshi->enable_classes();
$geshi->set_overall_style('color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;', true);
$geshi->set_line_style('font: normal normal 95% \'Courier New\', Courier, monospace; color: #003030;', 'font-weight: bold; color: #006060;', true);
$geshi->set_code_style('color: #000020;', 'color: #000020;');
$geshi->set_link_styles(GESHI_LINK, 'color: #000060;');
$geshi->set_link_styles(GESHI_HOVER, 'background-color: #f0f000;');
// save generated stylesheet
$element->texy->styleSheet .= $geshi->get_stylesheet();
$out = $geshi->parse_code();
if ($element->texy->utf) // double-check buggy GESHI, it sometimes produce not UTF-8 valid code :-((
if ($out !== utf8_encode(utf8_decode($out))) return;
$element->setContent($out, true);
}
$texy = &new Texy();
// set user callback function for /-- code blocks
$texy->blockModule->codeHandler = 'asa';
// prepare CSS stylesheet
$texy->styleSheet = 'pre { padding:10px } ';
$texy->referenceHandler = 'myUserFunc'; //odpovidani na prispevek
$texy->safeMode(); //odpovidani na prispevek
// processing
$html = $texy->process($ukroja); // that's all folks!
?>
a kdyz do DB ulozim $html tak se mi tam ten text ulozi tak jak jsem ho napsal na strance do formu… uz si s tim lamu hlavu docela dlouho a porad nemuzu prijit na to kde je chyba.. kdyz jsem dal samotny example na web tak to slapalo v poho ale kdyz jsem s neho vzal tenhle kod a chtel ho zaclenit do stranky tak ani hovno.. vse mam jinak spravne nastavene… includuju texy.php atd…
prosim poradte
před 14 lety
- David Grudl
- Nette Core | 6806
V kódu žádnou práci s databází nebo formulářem nevidím, toto je standardní příklad s distribuce. Ale pokud nemáte přímo problém týkající se Texy, zkuste spíš http://interforum.interval.cz/
před 14 lety
- Pepino
- Člen | 21
No dekuji;) Uz jsem to sice vyresil, ale radsi sem napisu jak kdyby se nahodou nasel nekdo dalsi;)
slo jen o to ze kdyz sem ten kod mel takhle
$text = file_get_contents(‚sample.texy‘);
$html = $texy->process($text);
tak to ficelo ale kdyz jsem to mel takhle
$html = $texy->process($mujretezec);
tak to neficelo…
reseni je nasledujici..
pred tim nez vlozite text k sformatovani pres Texy! ho prozente fci stripslashes(); (pozn. dgx: nesmysl)
takze asi takhle
$mujretezec = stripslashes($mujretezec);
$html = $texy->process($mujretezec);
a pak uz to slape bez problemu
Editoval Pepino (3. 5. 2005 19:39)
před 14 lety
- David Grudl
- Nette Core | 6806
Takto obecně to tvrdit nemůžeš. Nastuduj si problematiku magic quotes, toto nemá s Texy! naprosto nic společného.
před 14 lety
- Pepino
- Člen | 21
Nerikam ze to beru obecne, ale tohle vyresilo muj problem.
před 14 lety
- juneau
- Člen | 166
to same je tu ale napsane nekde jinde :)
před 14 lety
- Pepino
- Člen | 21
a kde?
před 14 lety
- juneau
- Člen | 166
tady: 47-problem-img-class-floatleft-floatleft-alt-girl-girl
… z cehoz plyne, ze stripslashes()
bych nasadil jen po
odeslani dat formularem. pokud vytahnes data z databaze a budes je parsovat,
tak by to podle me uskodilo (odebralo by to lomitka, ktera napsal
uzivatel). Asi.
před 14 lety
- Pepino
- Člen | 21
no vsak tak to mam.. a pak kdyz to z db vytahuju tak pouzivam addshlashes() a jede to jak ma;)
před 14 lety
- David Grudl
- Nette Core | 6806
kdyz vytahujes z DB, tak uz zadne transformace (addslashes) nedelej.
před 14 lety
- Pepino
- Člen | 21
jenze ja to delam jeste pred tim nez to vlozim do db protoze kdybych to tam nedal a napsal bych neco jako
//---code php
array(‚neco‘,‚neco‘);
\\---
tak by mi to hodilo mysql error waring suplide nebo tak neco.. a tak nez to dam texy spracovat tak tam escape sequence odeberu a nez to do db ulozim tak je tam pridam… a pak uz to je v poho..
před 14 lety
- David Grudl
- Nette Core | 6806
Pepino, ukončeme tento thread, protože se netýká Texy!, ok?
Doporučuju Ti dobře nastudovat tuto problematiku, pro úspěšnou práci s PHP je nezbytná. Informačních zdrojů existuje nespočetně, zkus hledat magic_quotes, stripslashes(), addslashes() a hlavně metodu pokus omyl (tedy vše si v praxi vyzkoušet). Je třeba přesně vědět, kdy kterou fci použít a kdy ne. Sám jsem v tom měl kdysi hokej a musel jsem si dát vedle monitoru tahák :-)
Ve stručnosti:
- pokud je aktivní magic quotes, vždy na začátku skriptu zbav $_GET, $_POST, $_COOKIE lomítek
- pokud ukládáš do databáze, slashuj funkcí k tomu vhodnou (addslashes, sqlite_escape_string, viz též magic_quotes_sybase)
- pokud vytahuješ z databáze, už nic netransformuj
- pokud zobrazuješ na výstup, použij vždy transformaci htmlSpecialChars() (kromě bodu 5)
- bod č.4 neplatí jen tehdy, pokud je výstup v HTML (tedy například výstup z Texy)
- pokud je výstup parametrem URL (např
echo 'www.seznam.cz?hledej=' . $what
), použij urlencode(). Stále však platí bod č.4