使用从 mysqli php 到 MySql 数据库的 http 请求在 Ionic2 TypeScript 应用程序中检索希伯来语
Retrieve Hebrew in Ionic2 TypeScript application with http request from from mysqli php to MySql database
我正在尝试弄清楚如何获得 Hebrew
个字符。在我的 connection.php
中,我有 $con->set_charset('utf8');
,因此字母出现在输入字段中并使用此 connection.php
:
正确记录在 MySql
数据库中
<?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
已经包含它。而且我还尝试用 UTF-8
编码的记事本保存 home.html
,但没有任何帮助。
header(‘Content-type: text/xhtml; charset=windows-1255’);
已经在 connection.php
中,结果我在 MySql
数据库记录中有来自其他 http
请求和 .php
后端的希伯来字符.
例如在应用程序中输入:
或 MySql table:
但这不会影响按钮,以及同一应用程序 UI 中具有相同 connection.php
的其他几个地方,例如来自特定代码的这个:
如果没有 header(‘Content-type: text/xhtml; charset=windows-1255’);
它看起来像这样:
或申请中:
但不同于:
我不太明白,我做错了什么,必须用XHTML
改变,发送UTF-8
并承诺windows-1255
,但我已经尝试了return 它不同,作为 select.php
的 json
和数组 $myArray[] = $row;
作为 http
请求中的 let obj: MyObj = JSON.parse(data.text());
。
在结果控制台中:
\u05d0\u05d1\u05d2\u05d3
而object
是undefined
我发现了这个 Whosebug answer,它说旧式 ASCII
属性 列表只允许 ASCII
个字符,并且我有一个字符串的打印描述。也许这是一个原因,但我不确定,如何在 Ionic2
TypeScript
编辑 1:
我用 $con->set_charset('utf8mb4');
而不是 utf8
编辑了 connection.php
,而且我还使用了 $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
,其中包含希伯来字符记录并在其他应用程序中通过请求检索。
我不确定,如何为 Ionic2
html
页面设置 <meta charset=UTF-8>
,它已经在项目 index.html
的 <head>
中。添加到 home.html
或任何其他页面 <ion-header>
,没有任何变化。
在 \u05d0\u05d1\u05d2\u05d3
的情况下 echo json_encode($myArray, JSON_UNESCAPED_UNICODE);
看起来像 returns 正确的英文字符串 json
名称,但希伯来语仍在 Mojibake
中。无论如何,为了避免 Unicode codepoints
,在我的例子中,在 http
请求中得到没有数组和对象的回显 $row["name"].'.';
就足够了。但我不确定,如何处理 Mojibake
编辑 2:
显示创建 table,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:
文本结果:
正文:
׳׳‘׳’׳“
׳׳•׳¨ ׳¢׳§׳™׳‘׳
׳׳׳•׳ ׳™ ׳™׳¦׳—׳§
从控制台复制:
在数据库中:
作为希伯来语文本:
אבגד
אור עקיבא
אלוני יצחק
同时与其他页面中的另一个请求相同table并记录,控制台:
在应用程序中:
我至少看到 3 个问题。
\u05d0\u05d1\u05d2\u05d3
-- 正在使用 Unicode 代码点。不要那样做。使用json_encode(str, JSON_UNESCAPED_UNICODE)
来避免它。
一图显示"Mojibake";另一个显示 "black diamonds"。两者都被讨论 。 set_charset('utf8')
只是需要保持一致的大约 4 件事之一。
重新编辑 3: D790 D791 D792 D793
是 אבגד
的 utf8 编码的正确十六进制。因此,数据存储正确。但是数据显示不正确(Mojibake)。现在,通过 link:
- 要存储的字节需要进行 UTF-8 编码。 -- 这个可以。
- INSERTing和SELECTing text时的连接需要指定utf8或utf8mb4。 -- 提供
SHOW VARIABLES LIKE 'char%'
- 该列需要声明为 CHARACTER SET utf8(或 utf8mb4)。 -- 这个可以。
- HTML 应该以
<meta charset=UTF-8>
开头。 -- 如果您在网页上显示,请在 HTML 中或通过配置浏览器查看它是否设置为该方式。
但是...我对我们尚未达成一致感到不满意。 Mojibake 应显示 ×בגד
。您可以复制并粘贴输出吗?我无法对那张图片做任何事情。
我正在尝试弄清楚如何获得 Hebrew
个字符。在我的 connection.php
中,我有 $con->set_charset('utf8');
,因此字母出现在输入字段中并使用此 connection.php
:
MySql
数据库中
<?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
已经包含它。而且我还尝试用 UTF-8
编码的记事本保存 home.html
,但没有任何帮助。
header(‘Content-type: text/xhtml; charset=windows-1255’);
已经在 connection.php
中,结果我在 MySql
数据库记录中有来自其他 http
请求和 .php
后端的希伯来字符.
例如在应用程序中输入:
或 MySql table:
但这不会影响按钮,以及同一应用程序 UI 中具有相同 connection.php
的其他几个地方,例如来自特定代码的这个:
如果没有 header(‘Content-type: text/xhtml; charset=windows-1255’);
它看起来像这样:
或申请中:
但不同于:
我不太明白,我做错了什么,必须用XHTML
改变,发送UTF-8
并承诺windows-1255
,但我已经尝试了return 它不同,作为 select.php
的 json
和数组 $myArray[] = $row;
作为 http
请求中的 let obj: MyObj = JSON.parse(data.text());
。
在结果控制台中:
\u05d0\u05d1\u05d2\u05d3
而object
是undefined
我发现了这个 Whosebug answer,它说旧式 ASCII
属性 列表只允许 ASCII
个字符,并且我有一个字符串的打印描述。也许这是一个原因,但我不确定,如何在 Ionic2
TypeScript
编辑 1:
我用 $con->set_charset('utf8mb4');
而不是 utf8
编辑了 connection.php
,而且我还使用了 $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
,其中包含希伯来字符记录并在其他应用程序中通过请求检索。
我不确定,如何为 Ionic2
html
页面设置 <meta charset=UTF-8>
,它已经在项目 index.html
的 <head>
中。添加到 home.html
或任何其他页面 <ion-header>
,没有任何变化。
在 \u05d0\u05d1\u05d2\u05d3
的情况下 echo json_encode($myArray, JSON_UNESCAPED_UNICODE);
看起来像 returns 正确的英文字符串 json
名称,但希伯来语仍在 Mojibake
中。无论如何,为了避免 Unicode codepoints
,在我的例子中,在 http
请求中得到没有数组和对象的回显 $row["name"].'.';
就足够了。但我不确定,如何处理 Mojibake
编辑 2:
显示创建 table,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:
文本结果:
正文:
׳׳‘׳’׳“
׳׳•׳¨ ׳¢׳§׳™׳‘׳
׳׳׳•׳ ׳™ ׳™׳¦׳—׳§
从控制台复制:
在数据库中:
作为希伯来语文本:
אבגד
אור עקיבא
אלוני יצחק
同时与其他页面中的另一个请求相同table并记录,控制台:
在应用程序中:
我至少看到 3 个问题。
\u05d0\u05d1\u05d2\u05d3
-- 正在使用 Unicode 代码点。不要那样做。使用json_encode(str, JSON_UNESCAPED_UNICODE)
来避免它。
一图显示"Mojibake";另一个显示 "black diamonds"。两者都被讨论 set_charset('utf8')
只是需要保持一致的大约 4 件事之一。
重新编辑 3: D790 D791 D792 D793
是 אבגד
的 utf8 编码的正确十六进制。因此,数据存储正确。但是数据显示不正确(Mojibake)。现在,通过 link:
- 要存储的字节需要进行 UTF-8 编码。 -- 这个可以。
- INSERTing和SELECTing text时的连接需要指定utf8或utf8mb4。 -- 提供
SHOW VARIABLES LIKE 'char%'
- 该列需要声明为 CHARACTER SET utf8(或 utf8mb4)。 -- 这个可以。
- HTML 应该以
<meta charset=UTF-8>
开头。 -- 如果您在网页上显示,请在 HTML 中或通过配置浏览器查看它是否设置为该方式。
但是...我对我们尚未达成一致感到不满意。 Mojibake 应显示 ×בגד
。您可以复制并粘贴输出吗?我无法对那张图片做任何事情。