在ionic2 typescript应用程序中使用http请求从mysqli php检索希伯来语到mysql数据库

xj3cbfub  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(395)

我正在想办法 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表中:

但这并不影响按钮,以及其他几个地方在同一个应用程序界面上具有相同的功能 connection.php ,例如来自特定代码的:

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

或在应用中:

但它不同于:

我不太明白,我做错了什么,必须改变 XHTML ,正在发送 UTF-8 而且很有前途 windows-1255 ,但我试着用不同的方式返回,作为一个例子 jsonselect.php 带数组 $myArray[] = $row; 作为 let obj: MyObj = JSON.parse(data.text());http 请求。
在结果控制台中:

\u05d0\u05d1\u05d2\u05d3

以及 objectundefined 我找到了这个答案,上面写着 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>` 项目名称 `index.html` . 添加到 `home.html` 或任何其他页面 `<ion-header>` ,没有任何变化。
万一 `\u05d0\u05d1\u05d2\u05d3` 现在与 `echo json_encode($myArray, JSON_UNESCAPED_UNICODE);` 好像用英语返回正确的字符串 `json` 名字,但希伯来语还在 `Mojibake` . 无论如何,为了避免 `Unicode codepoints` ,在我的情况下,这足以得到回声作为 `$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:
结果:
![](https://i.stack.imgur.com/mVbI7.png)
编辑4:
带文本的结果:
![](https://i.stack.imgur.com/qhOLB.png)
在文本中:

׳׳‘׳’׳“

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

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

从控制台复制:
![](https://i.stack.imgur.com/p80YW.png)
在数据库中:
![](https://i.stack.imgur.com/0WAve.png)
希伯来文:

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

同时与其他页面中的另一个请求相同的表和记录,控制台:
![](https://i.stack.imgur.com/M59Ar.png)
应用程序内:
![](https://i.stack.imgur.com/ASxMt.png)
kx5bkwkv

kx5bkwkv1#

我看到至少3个问题。 \u05d0\u05d1\u05d2\u05d3 --正在使用unicode代码点。别那么做。使用 json_encode(str, JSON_UNESCAPED_UNICODE) 为了避免它。
一张图片显示的是“莫吉巴克”;另一个显示“黑钻石”。两者都在这里讨论。 set_charset('utf8') 这只是需要保持一致的四件事中的一件。
重新编辑3: D790 D791 D792 D793 是utf8编码的正确十六进制 אבגד . 因此,数据存储正确。但数据显示不正确(mojibake)。现在,通过链接:
要存储的字节需要utf-8编码。-这没关系。
插入和选择文本时的连接需要指定utf8或utf8mb4。-提供 SHOW VARIABLES LIKE 'char%' 列需要声明为字符集utf8(或utf8mb4)。--这没关系。
html应该以 <meta charset=UTF-8> . -- 如果要在网页上显示,请查看是在html中还是通过配置浏览器进行设置。
但是。。。我不满意我们还处在同一个阶段。莫吉贝克应该表现出来 ×בגד . 你能复制粘贴输出吗?我对那张照片无能为力。

相关问题