Zmusiliście mnie do tego! (IMG:
http://forum.php.pl/style_emoticons/default/Rkingsmiley.png)
<?php
/**
* XHTMLSession
*
* Kod dostępny za darmo, czyli słowem całkowite OpenSource
* Miło by było jakby została informacja o autorze.
*
* @author Paweł `hwao` Halicki
* @version 1.0.0
*/
class XHTMLSession {
/**
* Czy funkcja ini_set() zadziałała i zamienia
* wszyskie wstawione przez sesje & na odpowiednie znaki
*
* @var bold
*/
private $bIniSet = false;
/**
* Na jaki znak ma zamienić wszyskie &
*
* @var string
*/
private $sAmp = '&';
/**
* Konstruktor
*
* @param string $sAmp - na co ma zamienić sesyjne '&'
*/
public function __construct( $sAmp = '&' ) {
if( ini_set( 'arg_separator.output', $sAmp ) == false ) { $this->bIniSet = true;
}
$this->sAmp = $sAmp;
}
/**
* XHTMLSession::prepareContent()
*
* Przygotowuje string do bycia zgodnym z XHTML'em
* pozbywając się problemu sesji
*
* @param string $sContent - strign do przygotowania
* @param bool $bIniSet - jezeli dasz true, to zawsze sie wlaczy.
* @return string
*/
public function prepareContent( $sContent, $bIniSet = false ) {
$this->bIniSet = true;
if( $this->bIniSet == false || $bIniSet ){
$sContent = $this->SessionSeparator( $sContent );
}
return $this->SessionInput( $sContent );
}
/**
* XHTMLSession::InputFormat()
*
* Metoda służy do formatowania inputa dodawanego przez Sesje
* Opis tablicy, co dostarcza znajduje się w metodzie.
* Musisz zwrócić taka wartość na jaką chcesz, żeby został zamieniony standardow
y input dostarczany przez sesje.
*
* @param array $aInput
* @return string
*/
private function InputFormat( $aInput ) {
/**
* Opis tablicy $aInput
* 0 - cały input (taki jaki został złapany)
* 1 - parametr type z inputa
* 2 - parametr name z inputa
* 3 - parametr value z inputa
*/
//return null; // Usunięcie go wogole.
return '<div>'.$aInput[0].'</div>'; // Zamienia inputa na takiego, który jest wewnątrz <div></div>
}
/**
* XHTMLSession::SessionSeparator()
*
* Zamienia separator sesji, jeżeli nie może tego zrobić przez ini_set()
* Jeżeli nie wiesz co robisz, nic tu nie zmieniaj :)
*
* @param string $sContent
* @return string
*/
private function SessionSeparator( & $sContent ) {
return preg_replace( '@&(?!amp;)@i', $this->sAmp, $sContent ); }
/**
* XHTMLSession::SessionInput()
*
* Łapie inputa dodawanego przez sesje
* Jeżeli nie wiesz co robisz, nic tu nie zmieniaj :)
*
* @param string $sContent
* @return string
*/
private function SessionInput( & $sContent ) {
return preg_replace_callback( '@<input type="([^"]+)" name="([^"]+)" value="([^"]+)" />@i', array( $this, 'InputFormat' ), $sContent ); }
}
?>
<?php
// Przykład 1
// Przystosowanie stringu
$XHTMLSession = new XHTMLSession();
$sContent = '& && &&&&& &&& & && & & &csccs ancjkanjk dbjkcdsbfkds & &&& &&
tego & nie ruszta :) dsads && 54645664&$dDSa&Dsadsada & & & tego & tez
To jakis wsciekly input
<input type="hidden" name="PHPSESSID" value="tujestsesja" />
fdsfs
';
// Jeżeli podajesz string i chcesz zamienić & które tam zostało "wpisane"
// musisz ustawić 2 parametr metody true, ponieważ musi przeszukać ciąg
// pomimo tego że nawet mogło działać ini_set(), ale w tym wypadku tam
// ta funkcja nie mogła zadziałać.
echo $XHTMLSession->prepareContent( $sContent, true ); ?>
<?php
// Przykład 2
// Przystosowanie całej strony, wykorzystując ob_start();
$XHTMLSession = new XHTMLSession();
?>
& && &&&&& &&& & && & & &csccs ancjkanjk dbjkcdsbfkds & &&& &&
tego & nie ruszta :) dsads && 54645664&$dDSa&Dsadsada & & & tego & tez
To jakis wsciekly input
<input type="hidden" name="PHPSESSID" value="tujestsesja" />
fdsfs
Ciebie powinien zainteresować 2 przykład (IMG:
http://forum.php.pl/style_emoticons/default/smile.gif)
Jeżeli coś nie działa, to napisz chetnie poprawie
Efekt działania:
& && &&&&& &&& & && & & &csccs ancjkanjk dbjkcdsbfkds & &&& &&
tego & nie ruszta :) dsads && 54645664&$dDSa&Dsadsada & & & tego & tez
To jakis wsciekly input
<div><input type="hidden" name="PHPSESSID" value="tujestsesja" /></div> fdsfs