我正在尝试使用PHP和MySQL构建购物车.MySQL中的数据库是utf8,数据库中的表是utf8,
我怎样才能使用希伯来字符?
我已将PHP字符集设置为utf-8:
header('Content-Type: text/html; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)
我已经将currencyMySQL中的列设置为varchar(1)整理utf8_unicode_ci.
但是,PHP中的以下代码:
$currency = '€';
$sql = "UPDATE myTable SET currency = '$currency' WHERE user = '$user'";
mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)
在MySQL中生成以下字符:
â
Run Code Online (Sandbox Code Playgroud)
如何让€符号在MySQL中正确存储?
为了让网站接受用户提交的内容(可能不是英文版)(例如日文版)并将其保存到数据库中,最好是对所有新内容进行utf8_encode,并在以后检索时使用utf8_decode?
进一步的信息:我正在使用doctrine,我在尝试保存或选择Unicode字符到MySQL数据库时遇到错误:
SQLSTATE [HY000]:常规错误:1267操作'='非法混合排序(latin1_swedish_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)
我有一个注册表格,它将插入一个成员表,整理是在utf8_general_ci,我SET NAMES utf8在PHP脚本中使用,好在这里是问题,我不能插入除纯字母以外的字符串,我尝试输入'Hélène'在一个表单字段,在sql查询运行之后,我用我的db表检查,该字段被插入为'H',每当字符串带有特殊字母表(如é, ?后面)时,其余的字母表都不能插入.
有人可以帮忙吗?谢谢.
解:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
mysql_query("SET NAMES utf8");
Run Code Online (Sandbox Code Playgroud)
以上两行是接受数据库输入和网页输出的关键部分.
谢谢大家的建议.
’正在显示而不是-在PHP页面中
我尝试使用不同的编码类型,如:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
Run Code Online (Sandbox Code Playgroud)
和
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
Run Code Online (Sandbox Code Playgroud)
但结果是一样的.可能是什么问题呢?
输入
<strong style="color:#A8A8A8;">1</strong>- Lorem Ipsum.
结果
1 - Lorem Ipsum.
我有一张包含特殊字符的表格,例如™.
可以使用phpMyAdmin和其他软件输入和查看此字符,但是当我在PHP中使用SELECT语句输出到浏览器时,我会在其中获得带有问号的菱形.
表类型是MyISAM.编码是UTF-8 Unicode.整理是utf8_unicode_ci.
html头的第一行是
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud)
我在输出之前尝试在字符串上使用htmlentities()函数.没运气.
我也试过在任何输出之前将它添加到php(没有区别):
header('Content-type: text/html; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)
最后我尝试在初始mysql连接下面添加这个(这导致显示其他奇数字符):
$db_charset = mysql_set_charset('utf8',$db);
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
有很多关于在 PHP 中将 HTML 实体和特殊字符转换为 UTF8 文本的问题和文档。还有 PHP 文档本身,例如 thishtmlspecialchars_decode()和 this html_entity_decode()。但是,我找不到任何函数/解决方案清楚地描述如何将任何 HTML 字符和特殊实体转换为 UTF-8 文本。他们都说“如果你想这样做,那就这样做”等等。但没有任何解决方案指出“拥有人类可以阅读的纯 UTF-8 文本,然后这样做”。
我问的原因是我真的没有测试用例。我正在读取一个数据库,它是多语言的。然而,唯一的保证是字符是 HTML 格式的,我需要将它们转换为 UTF-8,以便理解这些语言的人可以阅读。现在,我该怎么做呢?清理/解码输入使其成为纯文本的正确方法是什么?
谢谢。
这是一个更新,从评论中可以清楚地看出我没有正确地提出问题。我的数据库包含文本。我想将该文本(包含 HTML 实体和特殊字符)转换为可以在网页上向最终用户显示的 UTF-8 文本。数据库中的文本是用多种语言编写的(例如法语、阿拉伯语、英语等)。所有这些都可以包含特殊字符的 HTML 实体。那么我怎样才能将所有这些转换为 UTF-8 文本,以便理解这些语言的人可以阅读呢?我喜欢删除那些特殊字符并将它们转换为人类可以阅读的内容。
字符编码对我来说一直是个问题.当正确的使用时间时,我真的没有得到.
我现在使用的所有数据库都是使用utf8_general_ci设置的,因为这似乎是一个很好的"一般"开始.从那时起我在过去的五分钟里就知道它不区分大小写.这很有帮助.
但我的问题是何时使用utf8_encode和utf8_decode?据我现在所知,如果我从我网站上的表中输出一个表单,我需要utf8_encode()在将其插入数据库之前输入该值.
然后,当我把它拉出来时,我需要utf8_decode它.是这样的吗?或者我错过了什么?
我正在使用ajax请求从客户端向服务器端发送值以使用ajax请求插入mysql数据库.价值是用印地语写的(हिन्दीमतलबजाने).但是在客户端,当我发出警报时,我得到了如上所示的印地文文本,但是在服务器端请求被处理之后,它被插入到数据库中%u0939%u093F%u0928%u094D%u0926%u0940 %u092E%u0924%...
我在客户端使用过
request1h[k].setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8;");
request1h[k].send(requestDatah);
Run Code Online (Sandbox Code Playgroud)
并在服务器端标题与PHP
<?php header("Content-Type: text/html; charset=utf-8");
mysqli_set_charset($con,"utf8");
Run Code Online (Sandbox Code Playgroud)
然后我读了关于utf8_encode并在post值上也使用了它
$value1 = utf8_decode($_POST['values']);
Run Code Online (Sandbox Code Playgroud)
但我仍然无法在数据库中插入印地文文本.请帮帮我怎么办?
今天我今天遇到了PHP和MySQL 的问题(这是问题),这个问题已经解决,但它唤醒了一个新的,更理论化的问题.
问题是在MySQL数据库中我有一个类型为的字段VARCHAR(64).当试图从PHP脚本插入一个字符串时,完整的字符串超过64个字节,var_dump证明它有71个.但是,这是我不明白的,运行完全相同的查询,具有完全相同的字符串,但从phpmyadmin手动,它确实适合64字节的SQL字段.
所以,这是问题所在.是否有任何理由为什么php中的相同字符串比直接插入数据库需要更多内存?
编辑:有人建议复制与charset相关的问题.MySQL中的charset是utf8_general_ci.在PHP中我没有定义字符集,但如果print(mb_detect_encoding($string));我得到它是ASCII编码.可能这是原因吗?如果我认为ASCII占用的内存少于utf8,我有多难?(无论如何,在我编写的脚本中mysqli_set_charset($con,"utf8");,它应该在查询之前转换为utf8)