在过去的几年里,我进行了大量的PHP编程,但一直让我烦恼的一件事是对Unicode和多字节字符串的支持较弱(可以肯定的是,native没有)。例如,“htmlentities”似乎是PHP世界中一个经常使用的函数,我发现当你努力保持每个字符串可本地化时,它绝对令人讨厌,只在你的数据库中存储UTF-8,只传递UTF-8个网页等。突然间,在您的数据库和浏览器之间的某处,出现了这个天真得无可救药的函数,它假装每个字节都是一个字符,然后把一切都搞砸了。我只是喜欢放弃这种功能,它们看起来完全是多余的。现在还有必要写“ä”吗?而不是“ä”?至少我的Firefox似乎非常乐意显示即使是最奇怪的亚洲字
有没有好的解决方案可以很好地进行这种音译?我试过使用iconv(),但是很烦人,而且它的行为不像人们预期的那样。使用//TRANSLIT将尝试替换它可以替换的内容,将所有不可转换的内容保留为“?”使用//IGNORE不会留下“?”在文本中,但也不会音译,并且在找到不可转换的字符时也会引发E_NOTICE,因此您必须将iconv与@错误抑制器一起使用使用//IGNORE//TRANSLIT(正如一些人在PHP论坛中建议的那样)实际上与//IGNORE相同(我自己在php版本5.3.2上尝试过)和5.3.13)同样使用//TRANSLIT//IGNORE与//TRANSLIT相同它还使用当
这个问题在这里已经有了答案:UTF-8allthewaythrough(13个答案)关闭2年前。我的表字符集是utf8,它的排序规则是utf8。现在我有这段代码:$mysqli=newmysqli("localhost","root","","Amoozeshgah");if(mysqli_connect_errno()){printf("Connectfailed:%s\n",mysqli_connect_error());}if(!$mysqli->set_charset("utf8")){printf("Errorloadingcharactersetutf8:%s\n",$my
我的页面中有一些非英语/外语的文本,但是当我尝试将其变为小写时,它的字符被转换为包含问号的黑色菱形。$a="ԵրկիրԱվելացնել";echo$b=strtolower($a);//returns��������������我已经在元标记中设置了我的字符集,但这并没有解决它。如何将我的字符串转换为小写而不破坏它? 最佳答案 您是否尝试过使用mb_strtolower()? 关于php-strtolower()用于unicode/多字节字符串,我们在StackOverflow上找到一
我可以在我的脚本中很好地使用UTF-8字符。事实上有可能havenamesofvariablesandfunctionscontainUnicodecharacters.还有mb_stringextension它处理多字节字符串,但在无数文章中,PHP因缺乏Unicode支持而受到批评。我不明白;为什么说PHP不支持Unicode? 最佳答案 几年前开始使用PHP时,UTF-8并没有得到真正的支持。我们谈论的是非Unicode操作系统(如Windows98/Me)仍然流行,而其他大型语言(如Delphi)也是非Unicode的时代。
我的一些脚本使用了不同的编码,当我尝试组合它们时,这就成了一个问题。但我不能改变他们使用的编码,相反我想改变脚本A结果的编码,并将其用作脚本B中的参数。那么:有什么简单的方法可以在PHP中将字符串从UTF-8更改为ISO-88591?我查看了utf_encode和_decode,但它们不符合我的要求。为什么不存在任何“utf2iso()”函数或类似函数?我不认为我有不能用ISO格式编写的字符,所以这应该不是一个大问题。 最佳答案 看看iconv()或mb_convert_encoding().顺便说一句:为什么不utf8_encod
我收到了这个错误;Illegalmixofcollations(utf8mb4_unicode_ci,IMPLICIT)and(utf8mb4_general_ci,IMPLICIT)foroperation'='我将“排序规则”更改为“utf8mb4_unicode_ci”。然后表被截断,我再次重新导入行。但仍然遇到同样的错误 最佳答案 我猜你在加入的表上有不同的排序规则。它说您在操作=中使用了非法的排序规则组合。所以你需要设置排序规则。例如:WHEREtableA.fieldCOLLATEutf8mb4_general_ci=t
有谁知道MySQL的utf8_unicode_cs排序规则是否存在?到目前为止,我的搜索已经枯竭。如果它根本不存在,那么创建一个是否相当简单?或者以某种方式使用utf8_unicode_ci或utf8_bin但“模拟”人们对utf8_unicode_cs排序规则的期望? 最佳答案 我遇到了同样的问题,在谷歌搜索后,似乎MySQL不包含它。正如你所说,“模拟它”,1)为确保数据库中区分大小写:将表列设置为utf8_bincollation这允许:严格的SELECTs:SELECT"Joe"不会返回带有"joe"/"joE"/"jO
Rails2.3.5、Ruby1.8.7和Mysql5.1.53我正在加载一个csv文件,它有一个字段,里面有TM符号(商标)TartDeco™-看起来像这样我正在尝试查找事件记录:Influencer.find(:first,:conditions=>["author_name=?andurl_discovered=?",author_name,site_profile_url])Mysql::Error:操作'='的排序规则(latin1_swedish_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)的非法混合:SELECT*FROMinfluen
我有一个数据库,其中包含♥•â—♥Dhaka♥•â—♥(应该是♥•●♥Dhaka♥•●♥)因为我在创建数据库时没有指定排序规则。现在我想修复它。我无法再次从最初获取数据的位置获取数据。所以我在想是否有可能在php脚本中获取数据并将其转换为正确的字符。我已将数据库和字段的排序规则更改为utf8_general_ci.. 最佳答案 排序规则与字符集不同。排序规则仅用于文本的排序和比较(这就是其中有一个语言术语的原因)。实际字符集可能不同。最常见的故障不在数据库中,而是在PHP和MySQL之间的连接中。连接的默认字