首页 > 解决方案 > 使用从 mysqli php 到 MySql 数据库的 http 请求在 Ionic2 TypeScript 应用程序中检索希伯来语

问题描述

我正在尝试弄清楚如何获取Hebrew字符。在我的connection.php我有 $con->set_charset('utf8');,所以字母出现在输入字段中并正确记录在MySql数据库中connection.php

<?php
header("Access-Control-Allow-Origin: *");
header('Content-type: text/xhtml; charset=windows-1255');

$con = new mysqli('localhost:XXXX', 'user', 'password');
$con->set_charset('utf8');

if (!$con)
{
    echo 'Not Connected To Server';
}

if (!mysqli_select_db ($con, 'mydb'))
{
    echo 'Database Not Selected';
}
?>

但是在几个地方,似乎当我试图从列表中获取它时,例如下面的home.ts this.function(); http请求,它看起来是这样的:

在此处输入图像描述

 function() {
    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');
    let options = new RequestOptions({ headers: headers });
      let postParams = '&user=' + this.user;
      this.http.post(this.phpPath + "select.php", (postParams), options)
        .subscribe(data => {         
          var nmb = (data.text().split(".").length);
          let x = data.text().split(".");
          for (var i = 0; i < nmb; i++) {
            var c = x[i];          
              this.list.push({ id: i, name: this.s + c }, );
          }
        }, error => {
          console.log(error);
        });     
  }

特殊select.php用途connection.php

<?php
require 'connection.php';
$user = mysqli_real_escape_string($con, $_POST["user"]);
$sql = "SELECT name FROM tab where user='".$user."'";
$result = mysqli_query($con, $sql);
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        echo $row["name"].'.';
    }
} else {
    echo "0 results";
}
mysqli_close($con);
?>

我试图添加 <meta charset="UTF-8">home.html,但index.html已经包含它。而且我还尝试home.html使用用 编码的记事本保存UTF-8,但没有任何帮助。

header(‘Content-type: text/xhtml; charset=windows-1255’);已经在connection.php,结果我在MySql其他http请求和.php后端的数据库记录中有希伯来语字符。

例如应用程序中的输入:

在此处输入图像描述

或在 MySql 表中:

在此处输入图像描述

但这不会影响按钮,以及同一应用程序 UI 中具有相同的其他几个位置connection.php,例如特定代码中的这个:

在此处输入图像描述

如果没有header(‘Content-type: text/xhtml; charset=windows-1255’);,它看起来是这样的:

在此处输入图像描述

或在应用中:

在此处输入图像描述

但它不同于:

在此处输入图像描述

我不太明白,我做错了什么,必须改变 with XHTML, sendUTF-8和 promise windows-1255,但我尝试以不同的方式返回它,作为请求中的jsonfrom select.phpwith 数组。$myArray[] = $row;let obj: MyObj = JSON.parse(data.text());http

在结果控制台中:

\u05d0\u05d1\u05d2\u05d3

并且objectundefined

我找到了这个stackoverflow 答案,它说旧式ASCII属性列表只允许ASCII字符,并且我有一个字符串的打印描述。也许这是一个原因,但我不确定,如何做到这一点Ionic2 TypeScript

编辑1:

connection.php$con->set_charset('utf8mb4');而不是编辑过utf8,而且我用过 $con->query("SET collation_connection = utf8mb4_unicode_520_ci");

$con = new mysqli('host', 'user', 'password');
$con->set_charset('utf8mb4');
$con->query("SET collation_connection = utf8mb4_unicode_520_ci");

MySql服务器上的数据库行是utf8_general_mysql500_ci,其中包含希伯来字符记录,并在应用程序的其他地方按请求检索。

我不确定,如何设置<meta charset=UTF-8>页面Ionic2 html,它已经在<head>projectindex.html中。添加到home.html或任何其他页面<ion-header>,没有任何改变。

\u05d0\u05d1\u05d2\u05d3现在的情况下,echo json_encode($myArray, JSON_UNESCAPED_UNICODE);似乎返回带有英文json名称的正确字符串,但希伯来语仍在Mojibake. 无论如何,为了避免Unicode codepoints,在我的情况下,获得 echo 就足够了,因为请求中$row["name"].'.';没有数组和对象。http但我不确定,该怎么办Mojibake

编辑2:

显示创建表,name列包含希伯来语:

CREATE TABLE `band` (
 `ID` int(20) NOT NULL AUTO_INCREMENT,
 `name` varchar(300) COLLATE utf8_general_mysql500_ci NOT NULL,
 `style` varchar(100) COLLATE utf8_general_mysql500_ci NOT NULL,
 `member` text COLLATE utf8_general_mysql500_ci NOT NULL,
 `zone` varchar(300) COLLATE utf8_general_mysql500_ci NOT NULL,
 `region` varchar(100) COLLATE utf8_general_mysql500_ci NOT NULL,
 `website` varchar(800) COLLATE utf8_general_mysql500_ci NOT NULL,
 `image` varchar(2083) COLLATE utf8_general_mysql500_ci NOT NULL,
 `user` varchar(700) COLLATE utf8_general_mysql500_ci NOT NULL,
 `num` varchar(200) COLLATE utf8_general_mysql500_ci NOT NULL,
 `registration` varchar(300) COLLATE utf8_general_mysql500_ci NOT NULL,
 PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_general_mysql500_ci

编辑 3:

<?php
require 'connection.php';   
$user = mysqli_real_escape_string($con, $_POST["user"]);  
$sql = "SELECT name, HEX(name) AS hex_name FROM tab where user='".$user."'";  
$result = mysqli_query($con, $sql);
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        echo $row["name"], ' ', $row["hex_name"], '.';
    }
} else {
    echo "0 results";
}    
mysqli_close($con);
?>

结果:

在此处输入图像描述

编辑4:

结果与文本:

在此处输入图像描述

在文本中:

 ׳׳‘׳’׳“

׳׳•׳¨ ׳¢׳§׳™׳‘׳

׳׳׳•׳ ׳™ ׳™׳¦׳—׳§

从控制台复制:

在此处输入图像描述

在数据库中:

在此处输入图像描述

作为希伯来文:

אבגד
אור עקיבא
אלוני יצחק

同时在另一个页面中对同一个表和记录的另一个请求,控制台:

在此处输入图像描述

在应用程序中:

在此处输入图像描述

标签: phpmysqlmysqliutf-8ionic2

解决方案



推荐阅读