[php] na submit is charset anders

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>
<body>
<?
$test = $_POST["test"];

echo "éÉÍÑÙãëÝÑDZ¡¬&cedil;ÊÐ";
echo "<br>";

echo iconv('ISO-8859-1', 'us-ascii//TRANSLIT', $test);
echo "<br>";

echo $test;
echo "<br />";
$test = htmlentities($test);
echo $test;
echo "<br />";
$test = html_entity_decode($test);
echo $test;
?>
<form method="post" action="test.php">
    <input typ=text name=test value="">
    <input type=submit value=nu>
</form>
</body>
</html>


Als je bovenstaande laat draaien en je submit bijv: éÉÍÑÙãëÝÑDZ¡¬¸ÊÐ

Dan wil ik dat als ik de broncode van die pagina bekijk ik ook éÉÍÑÙãëÝÑDZ¡¬¸ÊÐ zie staan na een submit. Dit krijg ik niet voor elkaar. In iconv moet het volgens mij gebeuren, maar ik weet niet welk charset ik dan moet gebruiken.

Na een submit wil ik namelijk éÉÍÑÙãëÝÑDZ¡¬¸ÊÐ in een variabele hebben, maar na een submit is het verandert in allemaal rare tekens. Let wel dat de html etc eromheen zo moet staan zoals het nu is, dus ook de charset etc. Het lijkt haast onmogelijk om dit voor elkaar te krijgen!

Het gaat mij er niet om hoe het in de browser eruit ziet, maar hoe het er in de broncode uitziet!

Het probleem is dat ik wat ik op het scherm zie in php in de variabele er heel anders uit ziet. Dat is erg vervelend!

[ Voor 7% gewijzigd door RSD op 03-03-2007 12:04 ]


Acties:
  • 0 Henk 'm!

  • Toolskyn
  • Registratie: Mei 2004
  • Laatst online: 22-06 11:01

Toolskyn

€ 500,-

Misschien een HTTP Content-Type header meesturen?

gewooniets.nl


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Zoals je ziet doe ik dat al!

Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

PHP:
1
header('Content-type: text/html; charset=utf-8');
Staat los van de html header

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Maar waarom UTF-8, ik wil ISO-9855-1 ? Wat is het nut van zo'n header sturen dan?

Ik edit zeg maar bestandjes in een html template die eruit ziet als hieboven.

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik ben er nog steeds niet uit hoe dit nu kan.

Als ik:
PHP:
1
echo "éÉÍÑÙãëÝÑDZ¡¬&cedil;ÊÐ";

doe, dan zie ik in mijn browser allemaal blokjes en wat andere rare tekens. Als ik de bron van dit alles bekijk dan zie ik wel éÉÍÑÙãëÝÑDZ¡¬¸ÊÐ staan.

Als ik een simpel formpje maak en ik submit éÉÍÑÙãëÝÑDZ¡¬¸ÊÐ en ik echo dit op het scherm zie ik niet hetzelde als hierboven. maar zie ik weer andere rare tekens. Wie o wie weet hoe dit kan. Ik vind dit hoogst opmerkelijk!

Mijn doel is om na een submit van éÉÍÑÙãëÝÑDZ¡¬¸ÊÐ dezelfde output in de browser als in de bron te krijgen als wanneer ik het gewoon echo zonder te submitten

[ Voor 14% gewijzigd door RSD op 07-03-2007 14:44 ]


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 15:31

orf

Probeer deze suggesties eens: http://www.yapf.net/Articles/ArticleView/864

Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Is er een verschil in weergave tussen Internet Explorer en Firefox?

Daar heb ik wel 'ns opmerkelijke verschillen in gehad ... de manier waarop met extended characters wordt omgegaan.

Haalt een urldecode() nog iets uit?

Recentelijk ben ik bezig geweest met een project in Russische karakters. Daarvoor heb ik toen nadrukkelijk gekozen voor UTF-8. Het lijkt erop dat UTF-8 redelijk goed geschikt is om in de volle breedte van applicaties te werken. Je zou eventueel ook alles UTF-8 kunnen houden en pas - op het allerlaatste moment - een conversie van UTF-8 naar jouw voorkeurs-character-set kunnen doen. Zien wat er dan gebeurt.

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Er is idd een verschil tussen FF en IE???

Het probleem is dat ik elke header ISO-9985-1 heb en in mijn database ook. Om dit even allemaal UTF-8 te maken?

Het gaat erom dat ik als ik de geposte variabelen wil bewerken het gewoon niet klopt, omdat de characters verandert zijn!

[ Voor 74% gewijzigd door RSD op 07-03-2007 15:00 ]


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

En dan gaat het waarschijnlijk in FF wel goed en in Exploder niet ... right?

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
ja, de output in de broser is wel goed, alleen de output in de broncode is in FF wel goed en in IE niet??

Broncode FF:
code:
1
2
3
4
5
6
&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#497;&#65533;&#65533;&cedil;&#65533;&#65533;<br><br>éÉÍÑÙãëÝÑDZ¡¬&cedil;ÊÐ<br />&Atilde;&copy;&Atilde;&#65533;&Atilde;&#65533;&Atilde;&#65533;&Atilde;&#65533;&Atilde;&pound;&Atilde;&laquo;&Atilde;&#65533;&Atilde;&#65533;&Atilde;&#65533;&Acirc;&plusmn;&Acirc;&iexcl;&Acirc;&not;&amp;cedil;&Atilde;&#65533;&Atilde;&#65533;<br />éÉÍÑÙãëÝÑDZ¡¬&cedil;ÊÐ 

<form method="post" action="test.php"> 
    <input typ=text name=test value=""> 
    <input type=submit value=nu> 
</form>


Broncode IE:
code:
1
2
3
4
5
éÉÍÑÙãëÝÑDZ¡¬&cedil;ÊÐ<br><br>éÃ&#8240;ÍÃ&#8216;Ã&#8482;ãëÝÃ&#8216;Ã&#8225;±¡¬&cedil;ÃŜÐ<br />&Atilde;&copy;&Atilde;&#8240;&Atilde;&Atilde;&#8216;&Atilde;&#8482;&Atilde;&pound;&Atilde;&laquo;&Atilde;&Atilde;&#8216;&Atilde;&#8225;&Acirc;&plusmn;&Acirc;&iexcl;&Acirc;&not;&amp;cedil;&Atilde;Ŝ&Atilde;<br />éÃ&#8240;ÍÃ&#8216;Ã&#8482;ãëÝÃ&#8216;Ã&#8225;±¡¬&cedil;ÃŜÐ 
<form method="post" action="test.php"> 
    <input typ=text name=test value=""> 
    <input type=submit value=nu> 
</form>

[ Voor 189% gewijzigd door RSD op 07-03-2007 15:06 ]


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Ik moet nu heeeeeel diep graven in mijn geheugen om te bedenken waarom dat ook al weer was.
Ben het probleem een flinke tijd geleden tegengekomen.

Kan het zijn dat je je "rare karakters" vanuit Word in je textbox plakt?
Dan zou daar ook nog wel 'ns het probleem kunnen zitten. Word doet de raarste dingen en bemoeit zich werkelijk OVERAL tegenaan.

EDIT:
Het zou kunnen dat ik het probleem uiteindelijk heb opgelost door vóórdat het form ge-submit wordt eerst in JavaScript de escape functie over de inhoud van de textbox heen te gooien.

Vervolgens moet je het resultaat in PHP dan weer decoden. Daarvoor heb ik toen de volgende functie ergens gevonden:
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
/**
 * rawurldecode including utf8 characters.
 * 
 * Taken from comments on php.nederland.net/urldecode.
 * Thank you Nelson!
 * 
 * @author nelson at phprocks dot com
 * @author R.J.T. de Vries
 * @param   string      $source             string to decode
 * @return  string      $decodedStr     decoded string.
 * @access  public
 */
function unicode_rawurldecode($source) {

    $decodedStr = ''; $pos = 0; $len = strlen($source);
    
    while ($pos < $len) {

        $charAt = substr($source, $pos, 1);
        
        if ( $charAt == '%' ) {
        
            $pos++;
            $charAt = substr($source, $pos, 1);
            
            if ($charAt == 'u') {
            
                // we got a unicode character
                $pos++;
                $unicodeHexVal = substr($source, $pos, 4);
                $unicode = hexdec($unicodeHexVal);
                $entity = "&#". $unicode . ';';
                $decodedStr .= utf8_encode ($entity);
                $pos += 4;
                
            } else {
            
                // we have an escaped ascii character
                $hexVal = substr ($source, $pos, 2);
                $decodedStr .= chr (hexdec ($hexVal));
                $pos += 2;
                
            }
            
        } else {
            $decodedStr .= $charAt;
            $pos++;
        }
        
    }
    
    return $decodedStr;

} // unicode_rawurldecode()


Overigens is dit wel een erg omslachtige oplossing. Ik ben nu zelf bezig om alles naar utf-8 om te zetten. Als je verstandig bent ga jij dat ook doen. Bovenstaande is een lelijke workaround om een NOG lelijker fout in Internet Explorer / Word te verhelpen.

[ Voor 72% gewijzigd door gvanh op 07-03-2007 15:10 . Reden: Aanvulling ]


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
De karakters komen uit homesite. Als ik de karakters van deze site kopieer en ik paste ze in dat formpje is de output hetzelfde!

[ Voor 60% gewijzigd door RSD op 07-03-2007 15:08 ]


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
code:
1
header('Content-type: text/html; charset=ISO-8859-1');

icm met accept-charset="iso-8859-1" in het form lijkt te werken...

Ik vraag me nu allene af of ik:
code:
1
header('Content-type: text/html; charset=ISO-8859-1');


ook op server nivo kan instellen in apache?

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ben er nu dus achter gekomen dat mijn database staat gecollate op latin1 en daar is standaard al een paar jaar utf-8 in geplaatst. Hoe kan ik dit nu goed krijgen? Het gebruik van convert bijv is dat aan te raden of kan ik beter met iconv gaan werken?
Pagina: 1