记住在 PHP 中完成您需要做的所有事情以使其与 Unicode 一起正常工作太棘手、乏味且容易出错,所以我正在寻找让 PHP 神奇地绝对升级的技巧从发霉的老式 ASCII 字节模式到现代 Unicode 字符模式,所有可能的一切都可以一次完成,只需使用一个简单的声明。
这个想法是使 PHP 脚本现代化以使用 Unicode,而不必用一堆令人困惑的备用函数调用和特殊正则表达式来弄乱源代码。一切都应该使用 Unicode “做正确的事”,不问任何问题。
鉴于目标是以最少的麻烦实现最大的 Unicodeness,此声明必须至少做这些事情(加上我忘记的任何其他可以促进总体目标的事情) :
PHP 脚本源本身被认为是 UTF‑8 格式(例如,字符串和正则表达式)。
所有输入和输出都会根据需要自动转换为 UTF‑8 或从 UTF‑8 自动转换,并带有规范化选项(例如,所有输入规范化为 NFD,所有输出规范化为 NFC)。
所有具有 Unicode 版本的函数都使用它们(例如,Collator::sort 用于 sort)。
所有字节函数(例如,strlen、strstr、strpos 和 substr)都可以工作像相应的字符函数(例如,mb_strlen、mb_strstr、mb_strpos 和 mb_substr)。
所有正则表达式和正则表达式函数都透明地在 Unicode 上工作(即,就像所有的预编译器都隐式添加了 /u 一样,\w 和 \b 和 \s 都适用于 Unicode the way The Unicode Standard requires them to work , 等)。
为了额外的功劳 :),我希望有一种方法可以将此声明“升级”到完整字素模式。这样字节或字符函数就变成了字素函数(例如,grapheme_strlen、grapheme_strstr、grapheme_strpos 和 grapheme_substr),并且正则表达式适用于适当的字素(即 . — 甚至 [^abc] — 匹配一个 Unicode 字素簇,无论它包含多少代码点等)。
最佳答案
full-unicode 正是 PHP 6 的想法——它在一年多前被取消。 p>
所以,不,没有办法获得所有这些——除非使用正确的函数,并记住字符与字节不同。
不过,可能对你第四点有帮助的一件事是 Function Overloading Feature。 mbstring 扩展 (引用) :
mbstring supports a 'function overloading' feature which enables you to add multibyte awareness to such an application without code modification by overloading multibyte counterparts on the standard string functions.
For example,mb_substr()is called instead ofsubstr()if function overloading is enabled.
关于php - 使 PHP 脚本完全 Unicode 友好的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765093/
在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
//1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json
有没有一种简单的方法可以判断ruby脚本是否已经在运行,然后适本地处理它?例如:我有一个名为really_long_script.rb的脚本。我让它每5分钟运行一次。当它运行时,我想看看之前运行的是否还在运行,然后停止第二个脚本的执行。有什么想法吗? 最佳答案 ps是一种非常糟糕的方法,并且可能会出现竞争条件。传统的Unix/Linux方法是将PID写入文件(通常在/var/run中)并在启动时检查该文件是否存在。例如pid文件位于/var/run/myscript.pid然后你会在运行程序之前检查它是否存在。有一些技巧可以避免
我正在开发一个Ruby脚本,需要在没有Ruby解释器的情况下部署到系统上。它将需要在使用ELF格式的FreeBSD系统上运行。我知道有一个ruby2exe项目可以编译在Windows上运行的ruby脚本,但是在其他操作系统上这样做容易吗?甚至可能吗? 最佳答案 您是否检查过Rubinius或JRuby是否允许您预编译您的代码? 关于ruby-ruby脚本可以预编译成二进制文件吗?,我们在StackOverflow上找到一个类似的问题: https://
背景here.在上面的链接中,给出了以下示例:classauthor.id)endend除了这种语法对于像我这样的初学者来说很陌生——我一直认为类方法是用defself.my_class_method定义的——我在哪里可以找到关于类的文档RubyonRails中的方法?据我所知,类方法总是在类本身(MyClass.my_class_method)上调用,但如果Rails中的类方法是可链接的,似乎必须进行其他操作在这里!编辑:我想我通过对类方法的语法发表评论有点被骗了。我真的想问Rails如何使类方法可链接—我了解方法链接的工作原理,但不知道Rails如何允许您链接类方法而无需实际返
我遇到了一个非常困难的时期:#containedwithin:"MA\u008EEIKIAI"#shouldbe"MAŽEIKIAI"#natureofstring$pstring3"MA\u008EEIKIAI"$putsstring3MAEIKIAI$string3.inspect"\"MA\\u008EEIKIAI\""$string3.bytes#关于从哪里开始的任何想法?注意:这不是我的previousquestion的副本. 最佳答案 \u008E表示代码点为8e(十六进制)的unicode字符出现在字符串中的那个位置。