BOB + MySQL en gebroken UTF-8-codering

Ik gebruik van de BOB-bibliotheek met een MySQL-database in PHP, maar als ik in plaats van alle gegevens gecodeerd in UTF-8, zoals het arabisch woorden, het is ingevoerd in de database, maar als ?????????.

In mijn eigen kader, nadat ik het maken van de BOB-verbinding, ik stuur u twee query ‘ s – SET NAMES utf8 en SET CHARACTER SET utf8. Het werkt nog steeds niet.

Voorbeeld:

loadclass('PDO', array(
    sprintf(
        'mysql:host=%s;port=%s;dbname=%s',
        confitem('database', 'host'),
        confitem('database', 'port'),
        confitem('database', 'name')
    ),
    confitem('database', 'username'),
    confitem('database', 'password'),
    array('PDO::ATTR_PERSISTENT' => confitem('database', 'pconnect'))
));
$this->query('SET NAMES ' . confitem('database', 'charset'));
$this->query('SET CHARACTER SET ' . confitem('database', 'charset'));

Oplossing: Gebruik de json_encode functie voor het converteren van de gegevens voordat u deze aan de database, en het gebruik json_decode te decoderen na het halen. Dit is hoe ik het nu doen.

  • Weet je zeker dat dit niet het PHP-probleem? Zorg ervoor dat u mbstring geïnstalleerd?
  • Ik zou willen voorstellen om die terug te sturen dezelfde snaar en controleer als het aankomt op ok. Net als een test.
  • wat is confitem(‘database’,’charset’) waarde?
  • Col. Granaatscherven : resultaat voor confitem(‘database’,’charset’) is UTF8
InformationsquelleAutor Jason4Ever | 2010-12-17

 

4 Replies
  1. 127

    Gebruik:

    $pdo = new PDO( 
        'mysql:host=hostname;dbname=defaultDbName', 
        'username', 
        'password', 
        array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
    ); 

    Het dwingt UTF-8 op de BOB-verbinding. Het werkte voor mij.

    • als je de BOB::MYSQL_ATTR_INIT_COMMAND => ‘SET NAMEN ‘UTF8″ — zorg ervoor dat je niet hebt toegevoegd : ->exec(“SET utf8 tekenset”) …
    • U inschakelen met de extensie=intl, of extension=php_intl.dll
  2. 50

    Te stellen, moet u de juiste tekenset voor de verbinding. Voeg de charset=utf8 optie om de DSN (dit is de MySQL-specifieke!)

    $pdo = new PDO(
        'mysql:host=hostname;dbname=defaultDbName;charset=utf8',
        'username',
        'password'
    );

    Echter, in de PHP-versies voor 5.3.6, moet u gebruik maken van een tijdelijke oplossing als de charset optie wordt niet ondersteund.

    $pdo = new PDO(
        'mysql:host=hostname;dbname=defaultDbName',
        'username',
        'password',
        array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
    );
    • Wilde update van het bestaande, top-gestemd antwoord, maar mijn bewerking is geweigerd. Daarom plaatsen het als een nieuw antwoord.
    • Dank u! charset=utf8' Werk voor mij op Datatable-server
    • Bedankt voor deze! charset=utf8 was wat gesorteerde dit zeer vervelend probleem voor mij.
    • Kan je gewoon beide doen, of zou dat leiden tot bijwerkingen? In andere woorden, waarom niet gewoon altijd de charset in de verbindingsreeks en de pass die NAMEN optie?
  3. 3

    Alle pogingen zoals:

    PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' "

    of

    $this->connection = new PDO('mysql:host='.DBHOST.';dbname='.DBNAME.';charset=utf8', DBUSER, DBPASS, self::$opt);

    of

    $this->connection->exec("set names utf8");

    nog steeds gegenereerd onleesbare tekst puinhoop.

    In mijn geval, de oorzaak van het probleem was: htmlentities gebruikt voor het invoegen van gegevens in een database.
    Cyrillische letters werden volledig verwoest.

  4. 2

    Probeer het instellen van de default_charset waarde in php.ini naar UTF-8. Of u kunt instellen met behulp van de ini_set functie.

    Ook, als de invoer afkomstig is door middel van formulieren, zorg ervoor dat uw web pagina ‘ s naar UTF-8 met behulp van de meta tag.

    • hallo , ok ik zal het proberen , maar ik denk niet neeed dit op te lossen , ik wil het oplossen van mijn script 🙂 ?
    • ja .. ik heb het getest gegevens afkomstig van webpagina ‘ s , ja het komt met de utf-8 enconding , en er is een utf-8-codering meta tag
    • Ik had net hetzelfde probleem op de Windows machine, en dit was de oplossing voor het probleem. Alles was in gesprek UTF-8… behalve PHP.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *