0

Im doing a search auto-complete and when i get the data from the search it wont come in utf8, but all pages are utf8 and my .htaccess even has "AddDefaultCharset UTF-8".

Everything is working fine except the results coming in the diamond box with the question mark. I've tried the decode() but it didnt work for me. Any ideias how can i filter the results to come in UTF8?

<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("localhost", "root", "", "vamos_onde");

// Check connection
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

if(isset($_REQUEST["term"])){
    // Prepare a select statement
    $sql = "SELECT locals.id, locals.name, locals.adress, locals.type, locals.image, locals.opening, locals.closing, locals.ranking, GROUP_CONCAT(music_type.category ORDER BY locals.id SEPARATOR ', ') AS category FROM locals JOIN music_type ON FIND_IN_SET(music_type.id, locals.category_id) WHERE locals.active = 1 AND locals.name LIKE ? OR category LIKE ? GROUP BY locals.id";

if($stmt = mysqli_prepare($link, $sql)){
    // Bind variables to the prepared statement as parameters
    mysqli_stmt_bind_param($stmt, "ss", $param_term, $param_term);

    // Set parameters
    $param_term = $_REQUEST["term"] . '%';

    // Attempt to execute the prepared statement
    if(mysqli_stmt_execute($stmt)){
        $result = mysqli_stmt_get_result($stmt);

        // Check number of rows in the result set
        if(mysqli_num_rows($result) > 0){
            // Fetch result rows as an associative array
            while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
              $local_r = '';
                echo "
            <div class='display_search'>
            <a href='locals/show/" . $row['id'] . "'>
                  <div class='display_search_results'>

                      <div class='display_search_results_image'>

                        <img src='assets/images/locals/" . $row['image'] . "' alt='" . $row['name'] . "'>

                      </div>
                      <div class='display_search_results_info'>
                        <p> " . $row['name'] . " " . $row['adress'] . " </p>
                        <p> " . $row['category'] . "</p>
                      </div>
                      <div class='display_search_results_ranking'>";

                      $local_r = $row['ranking'];

                      switch ($local_r) {
                        case $local_r == 5:
                          echo "<i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star'></i>";
                          break;
                        case $local_r >= 4.5:
                          echo "<i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star-half-alt'></i>";
                          break;
                        case $local_r >= 4:
                          echo "<i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star'></i><i class='far fa-star'></i>";
                          break;
                        case $local_r >= 3.5:
                          echo "<i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star-half-alt'></i><i class='far fa-star'></i>";
                          break;
                        case $local_r >= 3:
                          echo "<i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i>";
                          break;
                        case $local_r >= 2.5:
                          echo "<i class='fas fa-star'></i><i class='fas fa-star'></i><i class='fas fa-star-half-alt'></i><i class='far fa-star'></i><i class='far fa-star'></i>";
                          break;
                        case $local_r >= 2:
                          echo "<i class='fas fa-star'></i><i class='fas fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i>";
                          break;
                        case $local_r >= 1.5:
                          echo "<i class='fas fa-star'></i><i class='fas fa-star-half-alt'></i><i class='far fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i>";
                          break;
                        case $local_r >= 1:
                          echo "<i class='fas fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i>";
                          break;
                        case $local_r >= 0.5:
                          echo "<i class='fas fa-star-half-alt'></i><i class='far fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i>";
                          break;
                        case $local_r >= 0:
                          echo "<i class='far fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i><i class='far fa-star'></i>";
                          break;
                      };"

                    </div>

                </div>
                  </a>
            </div> ";

            }
        } else{
            echo "<br><p>No matches found</p><br>";
        }
    } else{
        echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    }
}

// Close statement
mysqli_stmt_close($stmt);
}

// close connection
mysqli_close($link);
?>
Alexis Garcia
  • 452
  • 3
  • 15
  • Have you tried the execute `SET NAMES utf8` before you query/insert into the database? Also check the charset and collation of the existing tables. – odan Apr 24 '19 at 11:23
  • ye already done that too forgot to mention – Alexis Garcia Apr 24 '19 at 12:59
  • @odan - `SET NAMES` can be done once, after connecting. It does not need to be repeated. Even better is to set the parameters on the connection call. in the case of `mysqli`, do `$mysqli_obj->set_charset('utf8mb4');` – Rick James Apr 29 '19 at 21:46
  • See "black diamond" in https://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored for the Question in hand. – Rick James Apr 29 '19 at 21:47

0 Answers0