如何从字符串中删除所有ASCII代码


How to remove all ASCII codes from a string

我的句子包含ASCII字符代码,如

"#$%

如何删除所有ASCII代码?

我尝试了strip_tags()html_entity_decode()htmlspecialchars(),但它们都不起作用。

如果您不想要返回值,可以运行此程序:

preg_replace('/(&#x[0-9]{4};)/', '', $text);

但请注意。这基本上是一个核武器,以HTML实体的工作方式,我相信这会干扰字符串的其他部分。我建议把它们放在里面,并按照@hakra显示的方式进行编码。

您是否试图删除解析为非ascii字符的实体?如果这是你想要的,你可以使用这个代码:

$str = '" # $ % 琔'; // " # $ % 琔
// decode entities
$str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
// remove non-ascii characters
$str = preg_replace('/[^'x{0000}-'x{007F}]/u', '', $str);

// decode only iso-8859-1 entities
$str = html_entity_decode($str, ENT_QUOTES, 'iso-8859-1');
// remove any entities that remain
$str = preg_replace('/&#(x[0-9]{4}|'d+);/', '', $str);

如果这不是你想要的,你需要澄清这个问题。

如果您手头有多字节字符串扩展,则可以使用:

$string = '"#$%';
mb_convert_encoding($string, 'UTF-8', 'HTML-ENTITIES');

哪个确实给出:

"#$%

松散相关的是:

  • PHP DomDocument无法处理utf-8字符(☆)

使用DOM扩展,您可以加载它并将其转换为字符串,这可能有助于更好地处理HTML元素,例如:

echo simplexml_import_dom(@DomDocument::loadHTML('"#$%'))->xpath('//body/p')[0];

哪个输出:

"#$%

如果它包含HTML,您可能需要导出该元素的内部HTML,这在其他答案中有解释:

  • DOMDocument:如何将内部HTML获取为用换行符分隔的字符串

要从字符串中删除日语字符,可以使用以下代码:

// Decode the text to get correct UTF-8 text:
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
// Use the UTF-8 properties with `preg_replace` to remove all Japanese characters
$text = preg_replace('/'p{Katakana}|'p{Hiragana}|'p{Han}/u', '', $text);

文档

Unicode字符属性
Unicode脚本

有些语言是由多个脚本组成的。没有日语Unicode脚本。相反,Unicode提供了日语文档通常包含的平假名、片假名、汉字和拉丁文字。

尝试此处的代码