相关疑难解决方法(0)

utf8_general_ci和utf8_unicode_ci之间有什么区别?

utf8_general_ci和之间utf8_unicode_ci,性能方面有什么不同吗?

mysql unicode collation utf-8 character-set

998
推荐指数
7
解决办法
38万
查看次数

如何将Apache的默认编码更改为UTF-8?

我正在使用托管公司,如果文件index.html不存在,它将列出目录中的文件,它使用iso-8859-1作为默认编码.

如果服务器是Apache,有没有办法将UTF-8设置为默认值?

更新:另外我发现它实际上是使用HTML 3.2的DOCTYPE,然后根本就没有字符集...所以它没有设置任何编码.但有没有办法改变它使用UTF-8?

apache character-encoding apache-config

131
推荐指数
9
解决办法
34万
查看次数

我在PHP应用程序中正确支持UTF-8吗?

我想确保我所知道的关于UTF-8的一切都是正确的.我一直试图使用UTF-8一段时间,但我不断遇到越来越多的错误和其他奇怪的事情,这使得看起来几乎不可能拥有100%的UTF-8网站.我似乎总是想念一个地方.也许这里有人可以纠正我的清单或者确定它,所以我不会错过任何重要的事情.

数据库

每个站点都必须在某处存储数据.无论您的PHP设置是什么,您还必须配置数据库.如果您无法访问配置文件,请确保在连接后立即" 设置名称'utf8' ".另外,请确保在所有表上使用utf8_ unicode_ ci.这假设MySQL是一个数据库,你必须为其他人改变.

正则表达式

我做了很多比你的普通搜索替换更复杂的正则表达式.我必须记住使用"/ u"修饰符,以便PCRE不会破坏我的字符串.然而,即便如此,显然仍然存在问题.

字符串函数

所有默认字符串函数(strlen(),strpos()等)都应该用多字节字符串函数替换,它们查看字符而不是字节.

标题 您应确保您的服务器返回正确的浏览器标题,以了解您尝试使用的字符集(就像您必须告诉MySQL).

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

将正确的<meta>标记放在页眉中也是一个好主意.虽然实际的标题会覆盖它,但它们应该不同.

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
Run Code Online (Sandbox Code Playgroud)

问题

我是否需要在页面加载时将我从用户代理(HTML表单和URI)收到的所有内容转换为UTF-8,或者我是否可以保留字符串/值,并且仍然可以通过这些函数运行它们而不会出现问题?

如果我确实需要将所有内容转换为UTF-8 - 那么我应该采取哪些步骤?mb_detect_encoding似乎是为此而建的,但我一直看到人们抱怨它并不总是有效.mb_check_encoding似乎也有问题从一个格式错误的字符串中告诉一个好的UTF-8字符串.

PHP是否会根据所使用的编码(如文件类型)以不同的方式将字符串存储在内存中,或者它是否仍然像常规字符串一样存储,其中某些字符的解释方式不同(例如& vs&in HTML). chazomaticus回答了这个问题:

在PHP中(无论如何最多为PHP5),字符串只是字节序列.没有与之相关的隐含或显式字符集; 这是程序员必须跟踪的东西.

如果给mb_*函数一个非UTF-8字符串会导致问题吗?

如果UTF字符串编码不正确会出错(比如正则表达式中的解析错误?)或者它只是将实体标记为坏(html)?有不正确编码的字符串是否有可能导致函数返回FALSE,因为字符串不好?

我听说你应该把你的表格标记为UTF-8(accept-charset ="UTF-8"),但我不确定它的好处是什么......?

编写UTF-16是为了解决UTF-8的限制吗?就像UTF-8用尽人物的空间一样?(Y2(UTF)K?)

功能

以下是我发现的一些自定义PHP函数,但我无法验证它们是否真正有效.也许某人有一个我可以使用的例子.首先是convertToUTF8(),然后是来自wordpress的seem_utf8.

function seems_utf8($str) {
    $length = strlen($str);
    for ($i=0; $i < $length; $i++) {
        $c = ord($str[$i]);
        if ($c < 0x80) $n = 0; …
Run Code Online (Sandbox Code Playgroud)

php unicode utf-8

40
推荐指数
2
解决办法
3314
查看次数

PHP文件中的UTF-8 BOM签名

我正在编写一些评论过的PHP类,我偶然发现了一个问题.我的名字(对于@author标签)最终得到一个?(这是一个UTF-8字符,......和一个奇怪的名字,我知道).

即使我将文件保存为UTF-8,一些朋友报告说他们看到这个角色完全搞砸了(È™).添加BOM签名会消除此问题.但是这件事让我感到很麻烦,因为我不太了解它,除了我在维基百科上看到的以及其他一些类似的问题.

我知道它在文件的开头添加了一些东西,从我的理解它并没有那么糟糕,但我很担心,因为我读到的唯一有问题的场景涉及PHP文件.因为我正在编写PHP类来共享它们,所以100%兼容比在评论中使用我的名字更重要.

但我试图理解其含义,我应该使用它而不用担心吗?或者是否有可能造成损害的情况?什么时候?

php byte-order-mark utf-8 character-encoding

22
推荐指数
4
解决办法
4万
查看次数

删除不间断的空间?

我有一个查询删除所有特殊字符.
但是,一个空格在电子邮件字符串末尾抵制该查询.

示例: 'test@hotmail.com '

UPDATE my_table SET email= REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TRIM(LTRIM(RTRIM(email))),\'\x0B\',\'\'),\'\0\',\'\'),\'\t\',\'\'),\'\r\',\'\'),\'\n\',\'\'),\'\r\n\',\'\'),\'\n\r\',\'\'),\' \',\'\'),CHAR(160),\'\') WHERE id=X
Run Code Online (Sandbox Code Playgroud)

为什么?

我使用这个语句因为我有一个WHERE id IN(),所以我不想在PHP中处理特殊字符.我想UPDATE直接用每个电子邮件SETreplace,trim()功能.

但是,有些空格不会被删除,我不知道为什么.

我的表有大约1,200万行.我编写了一个CRON来获取它们以删除所有特殊字符(不幸的是因为在过去我们没有检查过它们INSERT).

所以我构建了这个查询来处理我的12 MM行.除了正确的空白外,它的工作效果非常好(有时它有时不被删除).我想在Workbench上添加它,查询始终100%工作.它没有任何意义.

这是我的查询再次没有反斜杠和我的where IN:

UPDATE NEWSLETTER_SUBSCRIPTION SET email= REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TRIM(LTRIM(RTRIM(email))),'\x0B',''),'\0',''),'\t',''),'\r',''),'\n',''),'\r\n',''),'\n\r',''),' ',''),CHAR(160),'') WHERE id IN (' . implode(',', $idEmailToBeProcess) . ')
Run Code Online (Sandbox Code Playgroud)

$idEmailToBeProcess 包含大约500个ID.

我认为正确的空格是一个不间断的空间,但我CHAR(160)在查询中的最后一次测试不起作用.

mysql space

6
推荐指数
1
解决办法
2912
查看次数

PHP中的编码问题(UTF-8)

我想在PHP中输出以下字符串:

äöü߀

因此,我手动将其编码为utf8:

äüÃÀ€

所以我的脚本是:

<?php
header('content-type: text/html; charset=utf-8');
echo 'ä ö ü ß €';
?>
Run Code Online (Sandbox Code Playgroud)

前4个字符是正确的(äöüß)但不幸的是,这个符号不正确:

äöüß

在这里你可以看到它.

你能告诉我我做错了什么吗?我的编辑器(Notepad ++)具有编码(Ansi/UTF-8)和格式(Windows/Unix)的设置.我需要改变它们吗?

我希望你能帮助我.提前致谢!

php encoding utf-8

5
推荐指数
2
解决办法
3万
查看次数