WordPress.org

Making WordPress.org

Changeset 6818


Ignore:
Timestamp:
03/01/2018 09:13:34 PM (19 months ago)
Author:
iandunn
Message:

Events: Switch to utf8 charset when querying geoname_summary.

This is in conjunction with altering the table schema as described in #3295:comment:8.

Props Otto42, dd32, iandunn.
Fixes #3295

Location:
sites/trunk/api.wordpress.org/public_html/events/1.0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/api.wordpress.org/public_html/events/1.0/index.php

    r6816 r6818  
    282282
    283283    // Exact match
    284     $row = $wpdb->get_row( $wpdb->prepare( "
     284    $query = "
    285285        SELECT name, latitude, longitude, country
    286286        FROM geoname_summary
     
    290290            FIELD( %s, timezone ) DESC,
    291291            population DESC
    292         LIMIT 1",
    293         $location_name,
    294         $country,
    295         $timezone
    296     ) );
     292        LIMIT 1";
     293
     294    $prepared_query = $wpdb->prepare( $query, $location_name, $country, $timezone );
     295    $db_handle      = $wpdb->db_connect( $prepared_query );
     296
     297    $wpdb->set_charset( $db_handle, 'utf8' ); // The content in this table requires a UTF8 connection.
     298    $row = $wpdb->get_row( $prepared_query );
     299    $wpdb->set_charset( $db_handle, 'latin1' ); // Revert to the default charset to avoid affecting other queries.
    297300
    298301    // Wildcard match
    299302    if ( ! $row && $wildcard && 'ASCII' !== mb_detect_encoding( $location_name ) ) {
    300         $row = $wpdb->get_row( $wpdb->prepare( "
     303        $query = "
    301304            SELECT name, latitude, longitude, country
    302305            FROM geoname_summary
     
    306309                FIELD( %s, timezone ) DESC,
    307310                population DESC
    308             LIMIT 1",
    309             $wpdb->esc_like( $location_name ) . '%',
    310             $country,
    311             $timezone
    312         ) );
     311            LIMIT 1";
     312
     313        $prepared_query = $wpdb->prepare( $query, $wpdb->esc_like( $location_name ) . '%', $country, $timezone );
     314        $db_handle      = $wpdb->db_connect( $prepared_query );
     315
     316        $wpdb->set_charset( $db_handle, 'utf8' ); // The content in this table requires a UTF8 connection.
     317        $row = $wpdb->get_row( $prepared_query );
     318        $wpdb->set_charset( $db_handle, 'latin1' ); // Revert to the default charset to avoid affecting other queries.
    313319    }
    314320
     
    319325    //   $row->name .= ', ' . $row->state;
    320326    // }
     327
     328    // Strip off null bytes
     329    // @todo Modify geoname script to to this instead?
     330    if ( ! empty( $row->name ) ) {
     331        $row->name = trim( $row->name );
     332    }
    321333
    322334    return $row;
  • sites/trunk/api.wordpress.org/public_html/events/1.0/tests/test-index.php

    r6817 r6818  
    190190            ),
    191191            'expected' => array(
    192                 'description' => 'nairobi',
     192                'description' => 'naíróbí',
    193193                'latitude'    => '-1.283',
    194194                'longitude'   => '36.817',
     
    204204            ),
    205205            'expected' => array(
    206                 'description' => 'tokyo',
     206                'description' => 'tōkyō',
    207207                'latitude'    => '35.690',
    208208                'longitude'   => '139.692',
     
    218218            ),
    219219            'expected' => array(
    220                 'description' => 'berlin',
     220                'description' => 'berlín',
    221221                'latitude'    => '52.524',
    222222                'longitude'   => '13.411',
     
    348348            ),
    349349            'expected' => array(
    350                 'description' => "dona ana",
     350                'description' => "doña ana",
    351351                'latitude'    => '32.390',
    352352                'longitude'   => '-106.814',
     
    397397            ),
    398398            'expected' => array(
    399                 'description' => 'yaoundé',
     399                'description' => 'yaounde',
    400400                'latitude'    => '3.867',
    401401                'longitude'   => '11.517',
     
    567567            ),
    568568            'expected' => array(
    569                 'description' => 'ciudad de méxico',
     569                'description' => 'ciudad de mexico',
    570570                'latitude'    => '19.428',
    571571                'longitude'   => '-99.128',
     
    595595            ),
    596596            'expected' => array(
    597                 'description' => 'bogotá',
     597                'description' => 'bogota',
    598598                'latitude'    => '4.610',
    599599                'longitude'   => '-74.082',
     
    628628            ),
    629629            'expected' => array(
    630                 'description' => 'são paulo',
     630                'description' => 'sao',
    631631                'latitude'    => '-23.548',
    632632                'longitude'   => '-46.636',
Note: See TracChangeset for help on using the changeset viewer.