How to Display Special Characters in PHP

How to display special characters in PHP

After much banging-head-on-table, I have a bit better understanding of the issue that I wanted to post for anyone else who may have had this issue.

While the UTF-8 character set will display special characters on the client, the server, on the other hand, may not be so accomodating and would print special characters such as à and è as and .

To make sure your server will print them correctly, use the ISO-8859-1 charset:

<?php
/*Just for your server-side code*/
header('Content-Type: text/html; charset=ISO-8859-1');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"><!-- Your HTML file can still use UTF-8-->
<title>Untitled Document</title>
</head>
<body>
<?= "àè" ?>
</body>
</html>

This will print correctly: àè



Edit (4 years later):

I have a little better understanding now. The reason this works is that the client (browser) is being told, through the response header(), to expect an ISO-8859-1 text/html file. (As others have mentioned, you can also do this by updating your .ini or .htaccess files.) Then, once the browser begins to parse that given file into the DOM, the output will obey any <meta charset=""> rule but keep your ISO characters intact.

Display special characters in PHP

Why are you setting your charset to iso-8859-1? That's Latin-1. You can't render non-Latin characters in Latin-1.

Try using UTF-8 instead.

Getting PHP code to recognize special characters

Special thanks to user @dorad for helping me get this working correctly. This is the code that actually works. I suspect the original version I had was coded for an earlier version of PHP which will not work correctly for special characters in newer PHP versions. So without further ado, this is the final code that works:

<?php
//creates a image handle
$image = imagecreate( 700, 70 );

if(!empty($_POST["bgcolor"])){
$background = imagecolorallocate( $image,0, 0, 0);
}

else {
$background = imagecolorallocate( $image,255, 255, 255);
}

//GET COLORS FROM POST AND SPLIT INTO RGB FORMAT
$color = $_POST["color"];
$pieces = explode("-", $color);
//COLORS
$color = imagecolorallocate($image, hexdec("0x".$pieces[0].""), hexdec("0x".$pieces[1].""), hexdec("0x".$pieces[2].""));

$font = 'fonts/'.$_POST["font"].'';
$fontSize = "25";
$fontRotation = "0";
$str = utf8_encode_mix($_POST["name"]);

$regex = $str;
$replaced = preg_replace($regex,"%26",$str);

$tb = imagettfbbox(25, 0, $font, $str);
$x = ceil((700 - $tb[2]) / 2);

ImageTTFText($image, $fontSize, $fontRotation, $x, 50, $color, $font, $str);

header("Content-Type: image/PNG");
ImagePng ($image);
imagedestroy($image);

function utf8_encode_mix($input, $encode_keys=false)
{
if(is_array($input))
{
$result = array();
foreach($input as $k => $v)
{
$key = ($encode_keys)? utf8_encode($k) : $k;
$result[$key] = utf8_encode_mix( $v, $encode_keys);
}
}
else
{
$result = utf8_encode($input);
}

return $result;
}
?>

Calling page index2.php

<div style="padding:00px;">

<strong>Please complete this form to preview the font and color font your name Embroidery: </strong>
<br><br>

<form action="index2.php?page=embroidery" method="post" name="font" style="background-color:#EDFAFC;">

<input name="page" type="hidden" value="lab_coats_embroidery">
<?
function checkcolor ($color) {

if($color == $_POST["color"]){
echo "checked";
}
}

//
?>

<table width="600" border="0" cellspacing="4" cellpadding="4">
<tr>
<td width="163">Please enter your name: </td>
<td width="398">Line 1:
<input name="name" type="text" value="<?=$_POST["name"]?>" size="40">
<br />
Line 2:
<input name="name2" type="text" value="<?=$_POST["name2"]?>" size="40" />
<br />
Line 3:
<input name="name3" type="text" value="<?=$_POST["name3"]?>" size="40" /></td>
<td width="18"> </td>
<td width="21"> </td>
</tr>
<tr>
<td>Please select a font: </td>
<td><select name="font" id="font">
<option value="<?=$_POST["font"]?>"></option>
<option value="brush">Brush script size 14</option>
<option value="athletic">Athletic swoosh</option>
<!--<option value="diana">Diana script</option>-->
<option value="brush738">Brush 738</option>
<option value="helvetica">Helvetica narrow</option>
<option value="homeward">Homeward</option>
<option value="cheltenham">Cheltenham</option>
<option value="athletic_narrow">Athletic Narrow</option>
<option value="courier">Courier</option>
<?php /*?> <option value="cancun">Cancun</option><?php */?>
</select>
Color:
<select name="color" id="color">
<option value="<?=$_POST["color"]?>"></option>
<option value="00-00-00">Black</option>
<option value="cc-00-00">Red</option>
<option value="05-34-92">Royal Blue</option>
<option value="13-2c-61">Navy</option>
<option value="86-00-41">Burgundy</option>
<option value="fd-08-c8">Fuchsia</option>
<option value="73-b9-ff">Sky Blue</option>
<option value="02-74-8c">Teal</option>
<option value="02-4b-2d">Forest Green</option>
<option value="43-07-71">Purple</option>
<option value="ff-c6-00">Gold</option>
<option value="dd-dd-dd">Silver</option>
<option value="96-54-31">Bronze</option>
</select></td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="button" id="button" value="Preview My Name" /></td>
<td> </td>
<td> </td>
</tr>
</table>
</form>

<div style="text-align:center;">
<!-- orig setting height 65px and no background positioning -->
<div style="background-image:url('dpimage.php?name=<?=$_POST["name"]?>&font=<?=$_POST["font"]?>&color=<?=$_POST["color"]?>'); background-repeat:no; background-position: center -20px; width:700px; height:40px;"></div>
<div style="background-image:url('dpimage.php?name=<?=$_POST["name2"]?>&font=<?=$_POST["font"]?>&color=<?=$_POST["color"]?>'); background-repeat:no; background-position: center -20px; width:700px; height:40px;"></div>
<div style="background-image:url('dpimage.php?name=<?=$_POST["name3"]?>&font=<?=$_POST["font"]?>&color=<?=$_POST["color"]?> '); background-repeat:no; background-position: center -20px; width:700px; height:40px;"></div>

</div>

</div>

How should I echo a PHP string variable that contains special characters?

This will prevent your tags from being broken by the echo:

<?php echo htmlentities($message); ?>



Related Topics



Leave a reply



Submit