我正在将用户提交的字符串从UTF-8转换为ASCII-可打印:

$str = 'Thê qúïck 😈 brõwn fõx júmps?😈 Óvér thé lázy dõg?😈';

$out = iconv('UTF-8', 'ASCII//TRANSLIT', $str);

var_dump($out);

$out = 'The quick ? brown fox jumps?? Over the lazy dog??';

我要把$out号的?个问号go 掉.

if ($out !== $str && strpos($out, '?') !== false) {
    // The input string was modified and contains at least one question mark
    //
    // Not even really sure where to begin
    //
    // Do we need to compare the position of every character from the
    // original string to every position of the new string and replace
    // where the original string did not contain a question mark?
    //
    // That's all I can think of, but there has to be a better way.
}

我想保留所有//TRANSLIT个字符,包括上面示例中包含的几个字符,例如áéïõú=aeiou.这个问题没有其他微妙之处.我认为这可以归结为字符串比较和替换问题.

我不一定要找人写整个代码,只是一个指针,在正确的方向,你会如何处理这个问题.

推荐答案

以下是基于transliterator_transliterate()的解决方案:

$str = transliterator_transliterate('Latin-ASCII', 'Thê qúïck 😈 brõwn fõx júmps?😈 Óvér thé lázy dõg?😈');
$str = preg_replace('/[\x80-\xFF]/', '', $str);
echo $str;

输出:

The quick  brown fox jumps? Over the lazy dog?

请注意,表情符号保留为transliterator_transliterate(),所以我使用正则表达式删除了所有剩余的非ASCII字符.

Php相关问答推荐

WooCommerce基于元数据的自定义范围目录排序

无法在WooCommerce中发送客户笔记邮箱通知

获取并判断WooCommerce用户订阅结束日期

WooCommerce我的帐户:从帖子作者处获取自定义帖子类型帖子ID

WooCommerce常规价格增加额外的附加平价

如何确保所有语言文件都使用Laravel中的新密钥进行更新?

目标类[Set_Locale]不存在.拉威尔

免费送货柜台,考虑到折扣码

在WooCommercel邮箱通知上添加来自Apaczka插件的选定交付点

无法在 WordPress 上获取 JSON 数据

由于 PHP 版本不受支持,如何终止 PHP 脚本?

正则表达式将文本替换为标签 html 以字符开头

如何在 php 中获取正确的时间

批量作业(job)提交错误无法处理所有文档,uris 似乎正确?

如何在 Process facade 中转义特殊字符?

在 EasyAdmin 中添加全局操作,将我的按钮放在表格下方而不是上方

无法按今天加上 7 天显示数据库项目

从 vendor 文件夹下的 Zend 文件夹中排除特定文件 Loader.php

我如何对每个房间和工作日的客人进行排序

PHP 正则表达式匹配!或 * 字符串中的任何位置