У меня есть этот текстовый симулятор, который позволяет посетителю выбрать желаемый шрифт и количество желаемых строк. Эта функциональность будет похожа на предварительный просмотр на ThingsRemembered.com, поэтому вы можете увидеть, как выглядит этот предмет, прежде чем купить его. Это работает хорошо, однако некоторые специальные символы не работают в симуляторе. Это следующие:
# - Does not appear
& - truncates this and anything after it
+ - Does not appear
\ - Does not appear
' - Erases entire line
Я предполагаю, что мне нужно экранировать эти символы и заменить их дружественными HTML-эквивалентами; У кого-нибудь есть пример того, как это делается?
<?php
//creates a image handle
$image = imagecreate( 700, 70 );
if(!empty($_GET["bgcolor"])){
$background = imagecolorallocate( $image,0, 0, 0);
}
else {
$background = imagecolorallocate( $image,255, 255, 255);
}
//GET COLORS FROM POST AND SPLIT INTO RGB FORMAT
$color = $_GET["color"];
$pieces = explode("-", $color);
//COLORS
$color = imagecolorallocate($image, hexdec("0x".$pieces[0].""), hexdec("0x".$pieces[1].""), hexdec("0x".$pieces[2].""));$font = 'fonts/'.$_GET["font"].'';
$fontSize = "25";
$fontRotation = "0";
$str = utf8_encode_mix($_GET["name"]);
// char code replacements
$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;
}
?>
Входные данные пользователя анализируются путем передачи текста с вызывающей страницы PHP в этот код PHP. Входная строка передается этой подпрограмме как переменная строки запроса; это был не мой дизайн, а то, что я унаследовал.
использование
#
где вы хотите #
&
где вы хотите &
+
где вы хотите +
\
где вы хотите \
Вы можете использовать следующий PHP для преобразования:
$html = '&#'.ord('#').';';
ord
Функция преобразует символ в код ASCII (числовой). Вы можете найти список символов и их числовые значения в ASCII здесь: http://www.asciitable.com/
Функция для преобразования всех ваших специальных символов:
function convertSpecialToHTML($char) {
$special = ['#', '&', '+', '\\'];
if (in_array($char, $special)) {
return '&#'.ord($char).';';
} else {
return $char;
}
}
демо: http://ideone.com/vGNZ5e
Вы также должны посмотреть на htmlentities
:
echo htmlentities("I'm a string with all your special characters: \ + & #", ENT_HTML5);
//I'm a string with all your special characters: \ + & #
Отдельное спасибо пользователю @dorad за помощь в правильной работе. Это код, который на самом деле работает. Я подозреваю, что оригинальная версия, которую я имел, была написана для более ранней версии PHP, которая не будет работать правильно для специальных символов в новых версиях PHP. Так что без дальнейших церемоний, это последний код, который работает:
<?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;
}
?>
Страница вызова 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>