【问题标题】:PHP, uppercase a single characterPHP,大写单个字符
【发布时间】:2014-03-01 23:59:39
【问题描述】:

基本上,我想知道的是,这会不会:

echo chr(ord('a')-32);

为每一个 a-z 字母工作,在每一个可能的 PHP 安装上,每一次?

阅读此处了解一些背景信息

搜索了一会,发现PHP中更改字符串大小写的大部分问题只适用于整个单词或句子。

我有一种情况,我只需要大写 1 个单个字符。

虽然我使用 strtoupperucfirstucwords 之类的函数对于单个字符来说太过分了,因为它们是为处理字符串而设计的。

所以在浏览了 php.net 之后,我发现了函数 chrord 将字符转换为它们的 ascii 表示(并返回)。

玩了一会儿,我发现我可以通过以下方式将低位转换为高位

echo chr(ord('a')-32);

这只是将字符在 ascii 表中偏移 32 个位置。恰好是角色的上层版本。

我在 stackoverflow 上发布此内容的原因是,我想知道是否有任何极端情况会破坏这种简单的转换。

更改 php 脚本的字符集或类似的东西会影响结果吗?

这是$upper = chr(ord($lower)-$offset) 在 PHP 中增加字符的标准方法吗?还是有别的?

【问题讨论】:

  • 而重新发明轮子的原因是?
  • 不,你应该在那个范围内是安全的。为了确保您可以获取 php 的源代码分发并检查 strtoupper、ucfirst 等是如何实现的。但是,如果您没有性能限制,请使用可用的方法。因为没有像 'a' 是一个字符串而不是 PHP 中的一个字符这样的过度杀伤力,所以 strtoupper 无论如何都会在它之后退出,因为没有其他事情可做。同样:'a' 是一个字符串,而不是 PHP 中的字符。
  • 除了您的解决方案过于矫枉过正(甚至可能更慢,您可能会测试...)它很可能只适用于非常小的字符集。大多数较大的字符集,如 utf-8(无论如何都应该使用)对它们的值并没有那么严格。简而言之:使用 strtoupper 因为安全、快速、经过验证。
  • 只对 ASCII 安全,对 UTF-8 不安全;但是 strtoupper() 等使用 UTF-8 也不安全;但也有等效的 mb_* 函数用于处理 UTF-8 字符的大小写转换
  • 您可能还需要通过将 32 添加到 ord 值来检查字符是否已经大写,然后再将其大写...内置的 strtoupper() 函数已经为您完成了这项工作

标签: php string char ascii


【解决方案1】:

ASCII 码在 PHP 安装之间不会改变,因为它是基于 ASCII 表的。

引用www.asciitable.com:

ASCII 代表美国信息交换标准代码。计算机只能理解数字,因此 ASCII 码是字符的数字表示,例如“a”或“@”或某种动作。 ASCII 是很久以前开发的,现在非打印字符已很少用于其原始用途。

引用PHP documentation on chr():

返回一个包含 ascii 指定字符的单字符字符串。

在任何情况下,我都会说,按照自己的方式做比用strtoupper() 做更过分。

strtoupper() is also faster.

【讨论】:

  • 这是一个非常好的证明。 :)
猜你喜欢
  • 2010-10-16
  • 2018-09-13
  • 2016-03-22
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 2015-12-03
相关资源
最近更新 更多