Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php utf8#U编码或解码isn';I don’我没做我想做的事_Php_Utf 8_Utf8 Decode - Fatal编程技术网

Php utf8#U编码或解码isn';I don’我没做我想做的事

Php utf8#U编码或解码isn';I don’我没做我想做的事,php,utf-8,utf8-decode,Php,Utf 8,Utf8 Decode,在写入数据库之前,我获取一个XML文件并将其读入各种字符串,但是我在处理德语字符时遇到了困难 XML文件开始 <?xml version="1.0" encoding="UTF-8"?> 所以$link_name就变成了PONS GroÃwèrterbuch Deutsch als Fremdsprache Android 然后我做了一个测试 $link_name = utf8_decode($link_name); 当我在终点站回音时,效果很好 PONS GroÃwörte

在写入数据库之前,我获取一个XML文件并将其读入各种字符串,但是我在处理德语字符时遇到了困难

XML文件开始

<?xml version="1.0" encoding="UTF-8"?>
所以$link_name就变成了PONS GroÃwèrterbuch Deutsch als Fremdsprache Android

然后我做了一个测试

$link_name = utf8_decode($link_name);
当我在终点站回音时,效果很好

PONS GroÃwörterbuch Deutsch als Fremdsprache Android as is now 
PONS Großwörterbuch Deutsch als Fremdsprache Android after utf8decode 
但是,当它写入我的数据库时,它显示为:

PONS KompaktwÃúrterbuch德语英语(Android)

MysQL中link\u name的排序规则是utf8\u general\u ci

我应该如何做才能将其正确写入数据库

这是我用来写入数据库的代码

$link_name = utf8_decode($link_name);
$link_id = mysql_real_escape_string($link_id);
$link_name = mysql_real_escape_string($link_name);
$description = mysql_real_escape_string($description);
$metadesc = mysql_real_escape_string($metadesc);
$link_created = mysql_real_escape_string($link_created);
$link_modified = mysql_real_escape_string($link_modified);
$website = mysql_real_escape_string($website);
$cost = mysql_real_escape_string($cost);
$image_name = mysql_real_escape_string($image_name);
$query = "REPLACE into jos_mt_links
(link_id, link_name, alias, link_desc, user_id, link_published,link_approved, metadesc, link_created, link_modified, website, price)
VALUES ('$link_id','$link_name','$link_name','$description','63','1','1','$metadesc','$link_created','$link_modified','$website','$cost')";
echo $link_name . " has been inserted ";
当我从shell运行它时,我看到

PONS Kompaktwörterbuch Deutsch-Englisch (Android) has been inserted

在写入数据库之前,必须使用mb_convert_编码或iconv函数。

您从XML文件中获得了一个UTF-8字符串,并将其放入UTF-8数据库。因此,不需要进行编码或解码,只需将原始字符串放入数据库。确保首先使用了
mysql\u set\u charset('utf-8')
告诉数据库有utf-8字符串

utf8\u解码
utf8\u编码
的名称有误导性。它们仅用于UTF-8和ISO-8859-1编码之间的转换。调用
utf8\u decode
,将其转换为ISO-8859-1,自然会丢失所有不适合该编码的字符。通常应避免使用这些函数,除非有需要使用8859-1的特定位置


<>你不应该考虑当你用一个字符串来确定一个字符串时,终端显示了什么。终端有自己的编码问题,尤其是在Windows下,可能无法正确输出每个字符。在Western Windows上,安装系统代码页(终端将使用该页将PHP吐出的字节转换为字符以显示在屏幕上)将是代码页1252,与ISO-8859-1类似但不相同。这就是为什么吐出ISO-8859-1的
utf8_decode
,似乎能使文本按预期显示。但那没什么用。在内部,您应该对所有字符串使用UTF-8。

谢谢,但是当我使用utf8并将其写入数据库中的utf8字段时,这会有什么帮助呢?谢谢bob,所以我将utf8\u编码的行更改为$domString=$dom->saveXML($element);并删除了utf8\u解码行,添加了mysql\u Set\u字符集,它已经成功了:)
$link_name = utf8_decode($link_name);
$link_id = mysql_real_escape_string($link_id);
$link_name = mysql_real_escape_string($link_name);
$description = mysql_real_escape_string($description);
$metadesc = mysql_real_escape_string($metadesc);
$link_created = mysql_real_escape_string($link_created);
$link_modified = mysql_real_escape_string($link_modified);
$website = mysql_real_escape_string($website);
$cost = mysql_real_escape_string($cost);
$image_name = mysql_real_escape_string($image_name);
$query = "REPLACE into jos_mt_links
(link_id, link_name, alias, link_desc, user_id, link_published,link_approved, metadesc, link_created, link_modified, website, price)
VALUES ('$link_id','$link_name','$link_name','$description','63','1','1','$metadesc','$link_created','$link_modified','$website','$cost')";
echo $link_name . " has been inserted ";
PONS Kompaktwörterbuch Deutsch-Englisch (Android) has been inserted