ANSI/UTF-8
In mijn simpele denkwijze is een php bestand niets anders dan een simpele text bestand.
Waarom maakt het dan uit of ik een bestand als ANSI of als UTF-8 opsla.
Vanwaar deze vraag.
Sinds de update van Rapid PHP2015 naar de 2016 versie werkte een script niet meer. Ik kreeg een foutmelding op regel 1 met (
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?PHP) als tekst, natuurlijk zonder de ().
Na een middag zoeken en proberen en vergelijken met een werkend script zag ik onin de status bij wisseling van script in de editor ANSI veranderen in UTF-8
Nadat ik het script als ANSI bewarde werkte de boel.
Maar een tekst bestand is toch een plat-bestand??
Na een middag zoeken en proberen en vergelijken met een werkend script zag ik onin de status bij wisseling van script in de editor ANSI veranderen in UTF-8
Nadat ik het script als ANSI bewarde werkte de boel.
Maar een tekst bestand is toch een plat-bestand??
Je huidige vraag is te algemeen. Geef een voorbeeld van code of een situatie waarin dit voor problemen zorgt.
Platte bestanden bestaan niet want There Ain't No Such Thing As Plain Text.
Gewijzigd op 25/07/2017 20:33:15 door Thomas van den Heuvel
1) ofwel staat er tekst in de file die plotseling "raar" uitziet.
waarbij de niet standaard letters plots verdubbelen tot 2 nog raardere tekens.
2) ofwel werken redirects, cookies of sessions niet meer door een headers-already-sent error, veroorzaakt door de BOM: het teken dat vooraan in een unicode file _kan_ staan om de Byte Order te Markeren.
Ik denk dat het dan optie 2 zal zijn want dat was de melding. Bijgaand het betreffende stuk script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
// ---------------------------------------------------------
// Vul hier een rapport specifiek clausule in.
// In dit rapport gaat het om welke combinaties hebben een onderkomen in de caravan nodig
$report = $_GET['report']; // report name/template
//$horseID = $_GET['horseFEIid']; // Horse FEI passport number/id
$sqlCombiWHERE = " AND 2010Combination.is_waitingList = 'No'" ;
$sqlCombiBASIC = "
SELECT person.*, horse.*, 2010Combination.*, country.* , country.*
FROM FEIPerson AS person
JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid
JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid
JOIN country ON country.ISO_A3 = person.competing_for_country " ;
$sqlCombiORDER = "
ORDER BY person.competing_for_country, person.family_name, 2010Combination.compNumber ASC " ; // not always neede, can do no harm
$sqlCombination = $sqlCombiBASIC . $sqlCombiWHERE . $sqlCombiORDER ;
if (!$Result = mysqli_query($dblink, $sqlCombination))
{
$html = "There is een error opening table for " . $report . "; " . mysqli_error($dblink) . "<br />" ;
// for debug only
$html .= "<br/>" ;
$html .= $sqlCombiBASIC ;
$html .= "<br/>" ;
$html .= $sqlCombiWHERE ;
$html .= "<br/>" ;
$html .= $sqlCombiORDER ;
$html .= "<br/>" ;
$pdf->writeHTML($html, true, false, true, false, ' ') ;
}
else
{
$numberCombination = mysqli_affected_rows($dblink) ; // must be at least 1
// ---------------------------------------------------------
$pdf->setJPEGQuality(75) ; // set JPEG quality
$pdf->SetFont('helvetica', '', 10) ; // set font
$pdf->AddPage() ; // add a page
$html = 'There is een error opening table for Financial Report; ' . mysqli_error($dblink) ;
$numberCombination = mysqli_affected_rows($dblink) ;
//$Result
if (!$result || ($numberCombination < 0))
{
}
elseif ($numberCombination > 0)
{
for($i=0; $i<$numberCombination; $i++) {
$Row = mysqli_fetch_assoc($Result);
$countryFlag = 'images/Flags/'.$Row['e_country'].'.png';
$pdf->SetFont('arialunicid0', '', 9);
$pdf->SetFont('helvetica', '', 9);
if($riderNF != $Row['competing_for_country']) {
// $pdf->AddPage();
$html = '<br /><br /><img border="0" src="'.$countryFlag.'" height="20"> <font size="+4"><b>'.$country_name.'</b></font> ('.$Row['competing_for_country'].')<br />
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<th width="18"> </th>
<th width="175">Rider</th>
<!--th width="210">Horse</th--><!-- In 2015 vervallen -->
<th width="75">Accomodation</th>
<th width="50">Caravan</th>
<th width="175">Groom</th>
</tr>
</table>';
$pdf->writeHTMLCell(0, 0, '', '', $html, 'B', 1, 0, true, 'L', false);
}
$html = '<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td width="25" align="center"> '.$Row[compNumber].'</td>
<td width="175"> '.$Row['first_name'].' '.ucwords(strtolower($Row['family_name'])).'</td>
<!--td width="210"> '.$Row['complete_name'].'</td--><!-- In 2015 vervallen -->';
if($Row['stayHorseBox'] == 'Yes')
{ $html .= '<td width="75" align="center"> Lorry </td>'; }
else if($Row['appartmentBB'] == 'No')
{ $html .= '<td width="75" align="center"> No </td>'; }
else if($Row['appartmentNumber'] == 0)
{ $html .= '<td width="75" border="1" align="center">Bad Boekelo</td>'; }
else
{ $html .= '<td width="75" align="center">BB-'.$Row['appartmentNumber'].'</td>'; }
if($Row['accomGroom'] == 'No')
{ $html .= '<td width="50" align="center"> No </td>'; }
else
if($Row['caravanNumber'] == 0)
{ $html .= '<td width="50" border="1"></td>'; }
else
{ $html .= '<td width="50" align="center"> '.$Row['caravanNumber'].' </td>'; }
if($Row['genderGroom'] == 'Female') {$genderGroom = '(F)';} else { $genderGroom = '(M)'; }
$html .= '<td width="175"> '.$Row['nameGroom'].' '.$genderGroom.' </td>
</tr>
</table>';
$pdf->writeHTML($html, false, false, true, false, ' ');
$riderNF = $Row['competing_for_country'];
}
}
else
{
$html = 'No records found.' ;
$pdf->writeHTML($html, true, false, true, false, ' ') ;
}
}
// ---------------------------------------------------------
//============================================================+
// END OF FILE
//============================================================+
?>
// ---------------------------------------------------------
// Vul hier een rapport specifiek clausule in.
// In dit rapport gaat het om welke combinaties hebben een onderkomen in de caravan nodig
$report = $_GET['report']; // report name/template
//$horseID = $_GET['horseFEIid']; // Horse FEI passport number/id
$sqlCombiWHERE = " AND 2010Combination.is_waitingList = 'No'" ;
$sqlCombiBASIC = "
SELECT person.*, horse.*, 2010Combination.*, country.* , country.*
FROM FEIPerson AS person
JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid
JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid
JOIN country ON country.ISO_A3 = person.competing_for_country " ;
$sqlCombiORDER = "
ORDER BY person.competing_for_country, person.family_name, 2010Combination.compNumber ASC " ; // not always neede, can do no harm
$sqlCombination = $sqlCombiBASIC . $sqlCombiWHERE . $sqlCombiORDER ;
if (!$Result = mysqli_query($dblink, $sqlCombination))
{
$html = "There is een error opening table for " . $report . "; " . mysqli_error($dblink) . "<br />" ;
// for debug only
$html .= "<br/>" ;
$html .= $sqlCombiBASIC ;
$html .= "<br/>" ;
$html .= $sqlCombiWHERE ;
$html .= "<br/>" ;
$html .= $sqlCombiORDER ;
$html .= "<br/>" ;
$pdf->writeHTML($html, true, false, true, false, ' ') ;
}
else
{
$numberCombination = mysqli_affected_rows($dblink) ; // must be at least 1
// ---------------------------------------------------------
$pdf->setJPEGQuality(75) ; // set JPEG quality
$pdf->SetFont('helvetica', '', 10) ; // set font
$pdf->AddPage() ; // add a page
$html = 'There is een error opening table for Financial Report; ' . mysqli_error($dblink) ;
$numberCombination = mysqli_affected_rows($dblink) ;
//$Result
if (!$result || ($numberCombination < 0))
{
}
elseif ($numberCombination > 0)
{
for($i=0; $i<$numberCombination; $i++) {
$Row = mysqli_fetch_assoc($Result);
$countryFlag = 'images/Flags/'.$Row['e_country'].'.png';
$pdf->SetFont('arialunicid0', '', 9);
$pdf->SetFont('helvetica', '', 9);
if($riderNF != $Row['competing_for_country']) {
// $pdf->AddPage();
$html = '<br /><br /><img border="0" src="'.$countryFlag.'" height="20"> <font size="+4"><b>'.$country_name.'</b></font> ('.$Row['competing_for_country'].')<br />
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<th width="18"> </th>
<th width="175">Rider</th>
<!--th width="210">Horse</th--><!-- In 2015 vervallen -->
<th width="75">Accomodation</th>
<th width="50">Caravan</th>
<th width="175">Groom</th>
</tr>
</table>';
$pdf->writeHTMLCell(0, 0, '', '', $html, 'B', 1, 0, true, 'L', false);
}
$html = '<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td width="25" align="center"> '.$Row[compNumber].'</td>
<td width="175"> '.$Row['first_name'].' '.ucwords(strtolower($Row['family_name'])).'</td>
<!--td width="210"> '.$Row['complete_name'].'</td--><!-- In 2015 vervallen -->';
if($Row['stayHorseBox'] == 'Yes')
{ $html .= '<td width="75" align="center"> Lorry </td>'; }
else if($Row['appartmentBB'] == 'No')
{ $html .= '<td width="75" align="center"> No </td>'; }
else if($Row['appartmentNumber'] == 0)
{ $html .= '<td width="75" border="1" align="center">Bad Boekelo</td>'; }
else
{ $html .= '<td width="75" align="center">BB-'.$Row['appartmentNumber'].'</td>'; }
if($Row['accomGroom'] == 'No')
{ $html .= '<td width="50" align="center"> No </td>'; }
else
if($Row['caravanNumber'] == 0)
{ $html .= '<td width="50" border="1"></td>'; }
else
{ $html .= '<td width="50" align="center"> '.$Row['caravanNumber'].' </td>'; }
if($Row['genderGroom'] == 'Female') {$genderGroom = '(F)';} else { $genderGroom = '(M)'; }
$html .= '<td width="175"> '.$Row['nameGroom'].' '.$genderGroom.' </td>
</tr>
</table>';
$pdf->writeHTML($html, false, false, true, false, ' ');
$riderNF = $Row['competing_for_country'];
}
}
else
{
$html = 'No records found.' ;
$pdf->writeHTML($html, true, false, true, false, ' ') ;
}
}
// ---------------------------------------------------------
//============================================================+
// END OF FILE
//============================================================+
?>
Elke respectabele editor heeft de mogelijkheid om op te slaan als UTF-8 zonder BOM (byte order mark). Dat zorgt voor de beste compatibiliteit.
"Error Headers already sent on line 1 of /path/to/script.php ON line ... some other script."
De fout zit dan op regel 1 van script.php.
En als dan lijkt dat die regel begint met <¿php, dan zal er dus een onzichtbaar teken (BOM) staan vóór die <
LEES altijd de foutmelding, en met speciaal aandacht voor de regelnummers in de foutmeldingen.