Oznámení

Provoz fóra byl ukončen

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:

  1. pokud je aktivní magic quotes, vždy na začátku skriptu zbav $_GET, $_POST, $_COOKIE lomítek
  2. pokud ukládáš do databáze, slashuj funkcí k tomu vhodnou (addslashes, sqlite_escape_string, viz též magic_quotes_sybase)
  3. pokud vytahuješ z databáze, už nic netransformuj
  4. pokud zobrazuješ na výstup, použij vždy transformaci htmlSpecialChars() (kromě bodu 5)
  5. bod č.4 neplatí jen tehdy, pokud je výstup v HTML (tedy například výstup z Texy)
  6. pokud je výstup parametrem URL (např echo 'www.seznam.cz?hledej=' . $what), použij urlencode(). Stále však platí bod č.4