【问题标题】:strings with only ascii characters php只有ascii字符的字符串php
【发布时间】:2011-02-07 19:25:04
【问题描述】:

我有一组字符串,其中一些是由非 ascii 字符组成的。 如何使用 php 脚本获取仅包含 ascii 字符的字符串。

非常感谢您的任何指导..

【问题讨论】:

  • 如果字符串包含非 ascii 字符,您要忽略整个字符串、只忽略字符还是替换字符?
  • ASCII 字符包括不可打印字符?

标签: php string ascii


【解决方案1】:
<?php

echo preg_replace('/[^(\x20-\x7F)]*/', '', 'Standard ASCII and some gärbägè');

?>

【讨论】:

  • 你仍然可以得到你没有检查的字符。总是白名单!匹配你知道你想要的东西。它更不容易出错。
  • @gcb - 不,你没有。事实上,这已经是一个白名单——“拒绝所有不是可打印的 ASCII 字符”。如果它是一个黑名单,它会说——“拒绝这些特定的不可打印或非 ASCII 字符并接受其他所有字符”。你倒过来了。
  • 你是对的。错过了那里的^,并假设十六进制代码用于超出可打印范围的内容。会把它归咎于缺乏咖啡:) 谢谢你让我直截了当。
【解决方案2】:

可能最简单的选择是使用iconv 函数(如果iconv 扩展可用),使用//IGNORE//TRANSLIT 选项(请参阅文档),如果行为适合您的需要。

【讨论】:

  • 大家好,我只想要可打印的 ASCII 字符。
  • iconv 仅适用于现在可以理解的编码。假设您有字符串a^Xb^X 是一个控制字符)。 iconv 永远不会删除它,因为^X 不是它理解的任何编码的一部分。它曾经使用//IGNORE 将其删除,但如果您关注 iconv 顶部评论中的错误,您会发现情况不再如此。
猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多