我正在设置一个新服务器,并希望在我的Web应用程序中完全支持UTF-8.我过去曾在现有的服务器上尝试过此操作,但最终似乎不得不回归ISO-8859-1.
我在哪里需要设置编码/字符集?我知道我需要配置Apache,MySQL和PHP来执行此操作 - 是否有一些我可以遵循的标准清单,或者可能是在出现不匹配的地方进行故障排除?
这适用于运行MySQL 5,PHP,5和Apache 2的新Linux服务器.
在utf8_general_ci和之间utf8_unicode_ci,性能方面有什么不同吗?
如何将整个MySQL数据库字符集转换为UTF-8并将整理转换为UTF-8?
目前我们在PHP中使用以下命令在我们的应用程序中将字符集设置为UTF-8.
由于这有点开销,我们想将其设置为MySQL中的默认设置.我们可以在/etc/my.cnf或其他地方这样做吗?
SET NAMES 'utf8'
SET CHARACTER SET utf8
Run Code Online (Sandbox Code Playgroud)
我在/etc/my.cnf中找了一个默认的字符集,但是没有关于字符集的内容.
此时,我执行以下操作将MySQL字符集和校对变量设置为UTF-8:
skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8
Run Code Online (Sandbox Code Playgroud)
这是处理这个问题的正确方法吗?
我试图找出我应该用于各种类型数据的排序规则.我将存储的100%内容是用户提交的.
我的理解是我应该使用UTF-8通用CI(Case-Insensitive)而不是UTF-8 Binary.但是,我无法找到UTF-8 General CI和UTF-8 Unicode CI之间的区别.
我试图使用UTF-8并遇到麻烦.
我尝试了很多东西; 这是我得到的结果:
????而不是亚洲人物.即使是欧洲文本,我也得到Se?or了Señor.Señor或新浪新闻为????.Sefor Señor.我究竟做错了什么?我该如何修复代码?我可以恢复数据,如果是,如何恢复?
我必须将hindi文本存储在MySQL数据库中,使用PHP脚本获取它并将其显示在网页上.我做了以下事情:
我创建了一个数据库并将其编码设置为UTF-8,并将其排序为utf8_bin.我在表中添加了一个varchar字段,并将其设置为接受charset属性中的UTF-8文本.
然后我开始向它添加数据.在这里,我不得不从现有网站复制数据.印地文文本如下:सूर्योदय:05:30
我直接将此文本复制到我的数据库中,并使用PHP代码echo(utf8_encode($string))显示数据.这样浏览器显示"??????".
但是,当我通过浏览器中的"查看源"插入UTF等效文本时,सूर्योदय会转换为सूर्योदय.
如果我进入并存储सूर्योदय在数据库中,它将完美转换.
所以我想知道的是我如何直接将सूर्योदय存储到我的数据库中并获取它并使用PHP在我的网页中显示它.
此外,任何人都可以帮助我理解是否有一个脚本,当我输入सूर्योदय时,给我सूर्योदय?
找到解决方案
我写了以下示例脚本,它对我有用.希望它也可以帮助其他人
<html>
<head>
<title>Hindi</title></head>
<body>
<?php
include("connection.php"); //simple connection setting
$result = mysql_query("SET NAMES utf8"); //the main trick
$cmd = "select * from hindi";
$result = mysql_query($cmd);
while ($myrow = mysql_fetch_row($result))
{
echo ($myrow[0]);
}
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的数据库存储hindi utf字符串的转储是
CREATE TABLE `hindi` (
`data` varchar(1000) character set utf8 collate utf8_bin default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO …Run Code Online (Sandbox Code Playgroud) 我最近升级了WAMPServer,现在在phpMyAdmin中,我看到了两个排序规则utf8_unicode_ci和utf8_unicode_520_ci.我在土耳其应用程序中使用"utf8_unicode_ci",但我想知道新的*_520排序规则有什么不同?
我试图显示这样的文字:
1ºA
Run Code Online (Sandbox Code Playgroud)
存储在MySQL表('级别')中.
在使用以下代码查询表'level'之后:
/**
* @Route("/list-level", name="list_level")
*/
public function listAction(Request $request)
{
$em = $this->getDoctrine()->getEntityManager();
$levels = $em->getRepository('AppBundle:Level')->findAll();
var_dump($levels[0]->getName());
die("fasf");
Run Code Online (Sandbox Code Playgroud)
这个var_dump()回报:
我使用Symfony,因此与数据库连接相关的信息缓存在文件中var/cache/prod/appProdProjectContainer.所以我打开它来检查charset参数的值,我发现了这个:
protected function getDoctrine_Dbal_DefaultConnectionService()
{
$a = new \Symfony\Bridge\Doctrine\ContainerAwareEventManager($this);
$a->addEventListener(array(0 => 'loadClassMetadata'), ${($_ = isset($this->services['doctrine.orm.default_listeners.attach_entity_listeners']) ? $this->services['doctrine.orm.default_listeners.attach_entity_listeners'] : $this->get('doctrine.orm.default_listeners.attach_entity_listeners')) && false ?: '_'});
return $this->services['doctrine.dbal.default_connection'] = ${($_ = isset($this->services['doctrine.dbal.connection_factory']) ? $this->services['doctrine.dbal.connection_factory'] : $this->get('doctrine.dbal.connection_factory')) && false ?: '_'}->createConnection(array('driver' => 'pdo_mysql', 'host' => 'localhost', 'port' => NULL, 'dbname' => 'my_javiergarpe1979', 'user' => 'javiergarpe1979', …Run Code Online (Sandbox Code Playgroud) 我有一组Word文档,我想使用我编写的PHP工具发布.我将Word文档复制并粘贴到文本框中,然后使用PHP程序将它们保存到MySQL中.我遇到的问题来自Word文档的所有非标准字符,如引号和省略号("...").我现在所做的是手动搜索并用纯文本或HTML实体替换这些东西(以及外部符号,如e-acute)(é等等)我是否可以调用PHP中的函数Word文档的输出,并将应该是实体的所有内容转换为实体,以及在Firefox中无法正确显示的其他符号转换为显示的符号.
谢谢!
我有一张如下表:
Run Code Online (Sandbox Code Playgroud)wordId | word --------------------------------- 1 | axxe 2 | test word 3 | another test word
我正在尝试运行下面的查询来查找以字母"ax"开头的记录.
SELECT * FROM `words` WHERE word LIKE 'ax%'
Run Code Online (Sandbox Code Playgroud)
MySQL找不到任何东西.
但是,如果我尝试下面的一个查询,我可以在结果上看到正确的记录(单词"axxe").
SELECT * FROM `words` WHERE word='axxe'
SELECT * FROM `words` WHERE word LIKE '%ax%'
SELECT * FROM `words` WHERE word LIKE 'a%'
Run Code Online (Sandbox Code Playgroud)
为什么MySQL不能为第一个查询找到正确的值?我试图在命令行和phpMyAdmin上运行它,但结果是一样的.
这是SHOW CREATE TABLE输出:
CREATE TABLE `words` (
`wordId` int(11) NOT NULL auto_increment,
`word` text collate utf8_turkish_ci NOT NULL
PRIMARY KEY (`word`)
) ENGINE=MyISAM AUTO_INCREMENT=2853 DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci
Run Code Online (Sandbox Code Playgroud) 为什么扩展的ascii字符(â,é等)被<?>字符替换?
我附加了一张图片...但是我使用PHP从MySQL中提取数据,其中一些位置有扩展字符...我使用的是字体Arial.
你可以在这里看到屏幕截图:http://img269.imageshack.us/i/funnychar.png/
在建议之后仍然发生,这是我做的:
我的firefox(view-> encoding)在添加行后设置为UTF-8,但是,选项标签内的文本仍显示有趣的字符而不是实际的重音字符.我现在应该寻找什么?
更新: 我在PHP程序中有以下内容给我那些<?>字符...
ini_set( 'default_charset', 'UTF-8' );
Run Code Online (Sandbox Code Playgroud)
在我的zend db对象创建之后,我正在设置以下查询:
$db->query("SET NAMES utf8;");
Run Code Online (Sandbox Code Playgroud)
我将所有表格更改为UTF-8并重新插入所有数据(浪费时间),因为它从未帮助过.之前是latin1.
STATUS也在报告:
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 4 days 20 hours 59 min 41 sec
Run Code Online (Sandbox Code Playgroud)
看看页面的来源,我看到<option value ="Br l Lake">Br l Lake
OK- NEW UPDATE- 我将PHP和HTML中的所有内容更改为:
和
header('Content-Type:text/html; charset = latin1');
现在它的工作原理是什么?如何将其全部转换为UTF-8?