gpt4 book ai didi

php - 使用PHP将希伯来文本插入MySQL(垃圾文本)

转载 作者:行者123 更新时间:2023-11-29 02:05:12 25 4
gpt4 key购买 nike

我在将希伯来语文本插入 mysql 时遇到了一个奇怪的问题。

基本上问题是:
我有一个 php 脚本,它从 csv 文件中提取希伯来文文本,然后将其发送到 mysql 数据库。数据库和表的所有字段的字符集都设置为 UTF8,排序规则为 utf8_bin。但是当我使用 mysql 插入它时,随机垃圾值出现在文本中,这使得它对输出完全无用。注意:我仍然可以看到一半的单词正确显示。

这是我的作业,可能会帮助您理解:
1. 正如我提到的表字符集和排序规则是 utf8。
2. 我发送了 header('Content-Type: text/html; charset=utf-8')
3. 如果我回显文本,它看起来很完美。当我使用 utf-8_encode 转换它时它得到正确转换。 (例如,שי יפת 转换为 ×©× ×פת)
4.当我对转换后的变量使用utf-8_decode并使用echo时,它仍然显示完美。
5. 我在 mysql_connect

之后使用了这些

mysql_query("SET character_set_client = 'utf8';");
mysql_query("SET character_set_result = 'utf8';");
mysql_query("设置名称 'utf8'");
mysql_set_charset('utf8');

甚至尝试过这个:
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $con)

  1. 在我的 php.ini 文件中添加了 default_charset = "UTF-8"。
  2. 我不知道 csv 文件中使用的编码,但是当我用 Notepad++ 打开它时,编码是没有 BOM 的 utf-8。
  3. 这是实际垃圾的示例:
    原文 : שי יפת
    utf8_encode 后的文本:ש××פת
    同一脚本中 utf8_decode 后的文本:שי יפת(完美)
    文本发送到mysql数据库:ש×? ×?פת(注意中间的 ?)
    如果我们从 mysql 回显,则文本:ש�? �?פת(输出关闭)
  4. 在 utf8_encoding 之前使用了 addslashes 和 stripslashes。 (即使运气不好也尝试过)
  5. 服务器在运行 xamp 1.7.4 的 Windows 上
    • Apache 2.2.17
    • MySQL 5.5.8(社区服务器)
    • PHP 5.3.5(VC6 X86 32 位)

编辑 1:只是为了澄清,我确实在网站上搜索了类似的问题,并确实实现了找到的建议(SET NAME UTF8 和许多其他选项等),但没有成功。所以请不要将此问题标记为重复。

编辑 2:这是完整的脚本:

    <?php
header('Content-Type: text/html; charset=utf-8');

if (isset($_GET['filename'])==true)
{
$databasehost = "localhost";
$databasename = "what_csv";


$databaseusername="root";
$databasepassword="";
$databasename= "csv";

$fieldseparator = "\n";
$lineseparator = "@contact\n";


$csvfile = $_GET['filename'];
/********************************/


if(!file_exists($csvfile)) {
echo "File not found. Make sure you specified the correct path.\n";
exit;
}

$file = fopen($csvfile,"r");

if(!$file) {
echo "Error opening data file.\n";
exit;
}

$size = filesize($csvfile);

if(!$size) {
echo "File is empty.\n";
exit;
}

$csvcontent = fread($file,$size);

fclose($file);

$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());

mysql_query( "SET NAMES utf8" );
mysql_set_charset('utf8',$con);
/*
mysql_query("SET character_set_client = 'utf8';");
mysql_query("SET character_set_result = 'utf8';");

mysql_query("SET NAMES 'utf8'");
mysql_set_charset('utf8');

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $con);
*/

@mysql_select_db($databasename) or die(mysql_error());



$lines = 0;
$queries = "";
$linearray = array();

foreach(explode($lineseparator,$csvcontent) as $line) {

$Name="";
$Landline1="";
$Landline2="";
$Mobile="";
$Address="";
$Email="";
$IMEI="temp";
$got_imei=false;

//echo $line.'<br>';
$lines++;

$line = trim($line," \t");

$line = str_replace("\r","",$line);

$linearray = explode($fieldseparator,$line);
//check for values to insert
foreach($linearray as $field)
{
if (is_numeric($field)){ $got_imei=true;$IMEI=trim($field);}
if (stristr($field, 'Name:')) {$Name=trim(str_replace("Name:", "", $field));}
if (stristr($field, 'Landline:')) {$Landline1=trim(str_replace("Landline:", "", $field));}
if (stristr($field, 'Landline2:')) {$Landline2=trim(str_replace("Landline2:", "", $field));}
if (stristr($field, 'Mobile:')) {$Mobile=trim(str_replace("Mobile:", "", $field));}
if (stristr($field, 'Address:')) {$Address=trim(str_replace("Address:", "", $field));}
if (stristr($field, 'Email:')) {$Email=trim(str_replace("Email:", "", $field));}



}
if ($got_imei==true)
{

$query = "UPDATE $databasetable SET imei=$IMEI where imei='temp'";
mysql_query($query);

}



else if (($Name=="") && ($Landline1=="" ) && ($Landline2=="") && ($Mobile=="") && ($Address=="")) {echo "";}
else
{
//$Name = utf8_encode("$Name");
//$Name = addslashes("$Name");
$Name = utf8_encode(mysql_real_escape_string("$Name"));

echo"$Name,$Landline1,$Landline2,$Address,$IMEI<br>";
$query = "insert into $databasetable (imei, name, landline1, landline2, mobile, address, email) values('$IMEI','$Name', '$Landline1','$Landline2','$Mobile', '$Address', '$Email');";
mysql_query($query);
$Name = utf8_decode(($Name));
echo $Name."<br>";

}
}
@mysql_close($con);



echo "Found a total of $lines records in this csv file.\n";

}
?>


<form>
Enter file name <input type="text" name="filename" /><br />
<input type="submit" value="Submit" /><br>
NOTE : File must be present in same directory as this script. Please include full filename, for example filename.csv.
</form>

这是一个 csv 文件的示例:

@contact
Name: שי יפת
Mobile: 0547939898

@IMEI
355310042074173

编辑 3:

如果我直接通过 cmd 输入字符串,我会收到此警告:

Warning Code : 1366
Incorrect string value: '\xD7\xA9\xD7\x99 \xD7...' for column 'name' at row 1

这是我在网上找到的一些可能相关的东西,有帮助吗? http://bugs.mysql.com/bug.php?id=30131

最佳答案

我也遇到过这个问题。这些行解决了它:

mysql_query( "SET NAMES utf8" );
mysql_query( "SET CHARACTER SET utf8" );

夏娜托娃

关于php - 使用PHP将希伯来文本插入MySQL(垃圾文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7624632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com