ugrás a tartalomhoz

Ékezet PHP-ben

cserkesz1 · 2010. Ápr. 15. (Cs), 15.28
Sziasztok!
Az alábbi oldalról töltöttem le shoutbox kódot: http://sandbox.palmnet.me.uk/shoutbox
Az ékezetet nem engedi, és nem tudok rájönni mi lehet a gond.
Az index.php fájl:

<table>
<?php
	include "config.php"; 
	include "functions.php";	
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> 
	<meta name="robots" content="all"/>
	
	<link href="design/style.css" rel="stylesheet" type="text/css" />
	<link href="<?php echo geturldir(); ?>rss.php" rel="alternate" type="application/rss+xml" title="<?php echo $adminname; ?>'s shoutbox RSS feed" />
	<link href="design/favicon.ico" rel="shortcut icon" />
	<script language="javascript" type="text/javascript">
		if(top!=self)
		{
			top.location.href=self.location.href;
		}
	</script>
	<!-- Original design by PWnet | www.pwnet.org.uk | October 2006 -->
	<!-- Shoutbox by Palmnet | www.palmnet.me.uk | October 2006 -->
	<!-- Shoutbox version 1.0RC5 -->
</head>
<body>
	<div id="page">
		<div id="header">

			<div id="menu">
				<a href="index.php<?php if($_SERVER['QUERY_STRING'] != ""){ echo "?" . $_SERVER['QUERY_STRING']; }?>"><font color=white>Frissités</font></a> 
			</div>
			<div id="content">
<?php include"post.php"; ?>
			</div>
		</div>

	</div>
</body>
</html>
</table>
A post.php pedig:

<table>
<?php
//This is the main code really. It's what gets the input and lets the output be shown.
// Though it's only ever used once, on the index.php
//
//If they have submitted data from the main form
if (isset($_POST['submit']))
{
	//Get the values form the input boxes and sanitise them
	$username = msgfilter($_POST['name']);
	$message = msgfilter($_POST['content']);
	
	//Validate the things they put in there
	$errorcode = validpost($username,$message);

	//This is one big mother of an if. It decides what you wanted and if you can have it, basically.
	if(isadmin($username) && strtolower($message) == "+edit"){ //If and admin and they want to edit...
		echo editform(); //Give them the edit form
	}elseif(!isadmin($username) && strtolower($message) == "+edit"){//If not an admin and want to edit...
		if($errorcode != ""){//If they already have errors, like attempting to be the admin
			$errorcode .= "<br />And don't try to edit other peoples posts either!"; //Tell them off
		}else{ //Else
			$errorcode = "You must be the admin to edit other peoples posts."; //Just slap the wrist
		}
		echo postform($errorcode); //And echo the normal post form, with the error code
	}elseif(strtolower($message) == "+credits"){ //If they request credits
		echo credits($username); //Give them the credits
	}elseif(isadmin($username)){ //If they are the admin
		$username = strtoupper($adminname{0}) . substr($adminname, 1); //Give them a nice capitalised name
		if($errorcode == ""){ // If no errors..
			postmsg($username,$message); //Post the message
		}
		echo postform($errorcode); //And display the post form
	}else{ //Otherwise
		if($errorcode == ""){ //If no errors
			postmsg($username,$message); //Post the message
		}
		echo postform($errorcode); //and give them the output as normal
	}
}elseif($HTTP_GET_VARS['item'] >= 0 && is_numeric($HTTP_GET_VARS['item'])){ //If they want to see an item
	echo displayhistory($HTTP_GET_VARS['item']); //Show them the specified item
}elseif($HTTP_GET_VARS['guid'] >= 0 && is_numeric($HTTP_GET_VARS['guid'])){ //If they get here from the guid tag
	echo displayhistory(($HTTP_GET_VARS['count'])-($HTTP_GET_VARS['guid'])); //Show them the specified item
}else{
	//If nothing has happened yet just show the post form.
	// However, if you just goto post.php it will be blank unless it's part of index.php
	echo @postform($errorcode);
}
?>
</table>
Valaki tudna nekem segíteni?

Köszönettel: Tibor
 
1

Link, probléma?

Poetro · 2010. Ápr. 15. (Cs), 15.49
Hol nem engedi az ékezetet, és mit nem enged rajta? Erősen szorítja?
Miért van egy <table> elem a DOCTYPE deklaráció előtt?
Jó lenne látni az oldalt, mert így nem derül ki mi is a problémád és hol.
2

Helló

cserkesz1 · 2010. Ápr. 15. (Cs), 16.11
A table véletlen.
itt van a shoutbox demója, az ékezetes betűket nem jeleníti meg.
A saját oldalam nem akarom mutatni, mert kinevetnétek.
Annyiban alakítottam át a kódot, hogy az index.php fejlécébe beleraktam
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> meta tagot, illetve külalakban.
3

"A saját oldalam nem akarom mutatni, mert kinevetnétek."

Kevlar · 2010. Ápr. 15. (Cs), 17.03
Megjavítod az autómat úgy, hogy nem viszem el hozzád?
4

Font / szöveg kezelés

Poetro · 2010. Ápr. 15. (Cs), 18.04
Vagy a font, vagy a szöveg kezelése nincs felkészítve csak ASCII karakterekre, ahogy az az eredeti demóban látszik is. Eleve nem szerencsés strtoupper és társainak használata, mivel nem Unicode barátok. Ezen kívül valami képre írja fel az üzeneteket, lehetséges hogy olyan betűtípussal, ami nem unicode barát. Keress szerintem egy másik megoldást, vagy nézd át tüzetesebben a forrását.
5

Szia

cserkesz1 · 2010. Ápr. 15. (Cs), 21.43
Köszönöm a válaszokat, még akkor átnézem tüzetesebben, próbálgatok, vagy keresek valami más shoutboxot, mert egy 3-4 fős priváti kis oldalra szeretném helyezni, szóval nem akarok világokat rengetni, csak valahogy ennek a külalakja tetszett. Php-ba amennyire tudok belemélyedek, csak nem akarom az egész php-t kitanulni evégett. Erre az ékezetes problémára guglizgattam, de szinte mindenütt ezt a meta változtatást írják. A config.php ben pedig egy content.txt -t hív meg, amibe menti a szövegeket, annak a formátumát átállítottam utf-8 ra, valahol itt olvastam, hogy valakinek majdnem hasonló gondja volt, neki az oldotta meg. Nálam nem, de ma este még próbálgatok.
Még egyszer köszi a tippet Poetro.
7

hello

cserkesz1 · 2010. Ápr. 16. (P), 08.23
Úgy látom az image.php ben kell átállítani valamit.

<?php
//The image.php file is the one that outputs the shoutbox image.
// This is the file you link to when using the shoutbox on various sites.
//
//Include the config.php because we need some variables from it
include "config.php";
include "functions.php";

//Set the header to make the browser display this as a gif image
header ('Content-Type: image/gif');
//These headers make sure we don't use a cached version [Thanks to WindPower for this tip]
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');

//Open the file with the content in so we can read it and display it on the shoutbox image
$lines = str_replace("\n", "", file($contentfile));
$lines = str_replace("\r", "", $lines);

//This code shows the timestamps or not, dependant on the config.php
// Some rather large regex's now. Means it's back compatible though
if(!$timestamps) {
	$lines = regex_timestamp_off($lines);
}else{
	$lines = regex_timestamp_cutdown($lines);
}
//Load the images into variables
$image = imagecreatefromjpeg($shoutboximg);
$sigimg = imagecreatefromjpeg($shoutboxbgimg);

//RGB colour of the text using the textcolour variable from config and the hex2rgb from functions:
$text_colour = imagecolorallocate($image, hex2rgb($textcolour,"r"), hex2rgb($textcolour,"g"), hex2rgb($textcolour,"b"));
$shadow_colour = imagecolorallocate($image, hex2rgb($shadowcolour,"r"), hex2rgb($shadowcolour,"g"), hex2rgb($shadowcolour,"b"));
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//!!Do not mess with the code below this line unless you know what you're doing!!
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//The value of Y is amount of full lines of text we can squeeze into the shoutbox image
$y = (floor(imagesy($image)/imagefontheight(2)) * imagefontheight(2)) - imagefontheight(2);
// Rydian Morrison is responsible for the following loop, It's ace, word wraps and draws every line :D
for ($i = 0; $i < count($lines); $i++)
{
	//Indent idea courtesy of Hoggs "\n " instead of "\n"
	$text = wordwrap($lines[$i], floor((imagesx($image)-12)/imagefontwidth(2)), "\n ", 1);
	$text = explode("\n", $text);
	
	for ($j = (count($text) - 1); $j >= 0; $j--)
	{
		if($shadow){
			imagestring($image, 2, 7, ($y+1), $text[$j], $shadow_colour);
		}
		imagestring($image, 2, 6, $y, $text[$j], $text_colour);
		$y -= imagefontheight(2);
	}
}
//Copy the shoutbox part of the image onto the main shoutbox image
imagecopyresampled($sigimg, $image, $Xval, $Yval, 0, 0, imagesx($image), imagesy($image), imagesx($image), imagesy($image));

//Output the final image to the user
imagegif($sigimg);
?>
9

proba

cserkesz1 · 2010. Ápr. 16. (P), 08.25
Próbáltam a headerbe ezeket tenni:

header("Content-Type: text/html; charset=UTF-8");
és

header("Content-Type: text/html; charset=ISO-8859-2");
Nem jó.

itt:
$lines = str_replace("\n", "", file($contentfile));
és itt:
$text = wordwrap($lines[$i], floor((imagesx($image)-12)/imagefontwidth(2)), "\n ", 1);
tudnám elképzelni, hogy valamit változtatni kéne esetleg, de nem értek hozzá.
6

content.txt

cserkesz1 · 2010. Ápr. 15. (Cs), 22.57
Ha a content.txt be írok ékezetesen és feltöltöm, akkor megjeleníti az ékezeteket az oldalamon lévő shoutbox-ba. Ha azután üzenetet küldök, akkor nem jeleníti meg.
10

str_replace

cserkesz1 · 2010. Ápr. 16. (P), 08.26
Valaki tudna segíteni, hogy hogyan tudom str_replace-nál az ékezetes karaktereket is bemásolni a line-ba?

$lines = str_replace("\n", "", file($contentfile));
Elvileg lehet, de nekem nem jön össze.
Találtam ezt a linket

illetve keresgéltem arra, hogy "str_replace accent", de nem tudom hogyan hasznosítsam ebben a shoutboxban.
8

Sziasztok

cserkesz1 · 2010. Ápr. 16. (P), 08.24
Találtam ezt a linket, ahol az str_replace ról ír. Ennek az alján írja le, hogy hogyan lehet az ékezetes karaktereket a változóba másolni:

<?php
function replace_accents($str) {
  $str = htmlentities($str, ENT_COMPAT, "UTF-8");
  $str = preg_replace(
'/&([a-zA-Z])(uml|acute|grave|circ|tilde);/',
'$1',$str);
  return html_entity_decode($str);
}
?>
Függvényt kell írnom a $lines-ra ennek alapján?
11

Megoldottam

cserkesz1 · 2010. Ápr. 16. (P), 20.45
Sikerüüüüüüüüüüüüüüült!! Sok szenvedés árán, de sikerült.
Üdv