PHP从字符串中删除符号
Posted
技术标签:
【中文标题】PHP从字符串中删除符号【英文标题】:PHP remove symbols from string 【发布时间】:2013-05-19 23:29:05 【问题描述】:通过互联网和这个网站搜索,我发现了几个关于这个问题的主题。问题是,如果插入的字符串必须仅包含拉丁字母的字符,则有无数的解决方案,但是当案例需要其他字母的文本时,它会变得有点棘手。
有什么方法可以在 php 中去除字符串中的所有符号,但保留所有 UTF-8 字母表的实际字母?我已经尝试创建一个包含键盘所有字符的数组,然后使用 str_replace 或 preg_replace 删除它们,但后来我发现不同的国家有时也有不同的键盘,其中包含不同的符号。例如,我的 qwerty 键盘没有英国键盘可能有的 £
符号。
我知道这是一个奇怪的问题,我只是想知道是否有一个我可能错过的简单解决方案。
任何帮助将不胜感激!
编辑: 好的 经过一些更好和扩展的 Google-ing 之后,我发现以下正则表达式可以很好地满足我的需要,它保留了所有类型的字母表中的所有字母,同时删除了所有符号。我在这里分享它以防其他人需要这样做。
$string = preg_replace('/[^\pL\pN\s]/u', '', $string);
【问题讨论】:
【参考方案1】:$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
$string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
echo $string; // output will be abcdef-g for 'a|"bc!@£de^&$f g'
【讨论】:
是的。但我需要的是允许所有字母的东西,而不仅仅是拉丁字母。【参考方案2】:解决办法是这样的:
$string = preg_replace('/[^\pL\pN\s]/u', '', $string);
【讨论】:
我喜欢它与 UTF-8 兼容这一事实。【参考方案3】:可以检查 unicode 字符和数字,但前提是 PCRE 是使用--enable-unicode-properties
编译的。如果是这种情况,那么您可以使用正则表达式 \pNl
它将匹配 unicode 字母和数字。更多关于 PHP 中 unicode 正则表达式的信息可以在 documentation 中找到
编辑: 编辑问题后
要获取符号,请使用 \P
而不是 \p
再次查看我上面链接到的 PHP 文档。
【讨论】:
真的,我的朋友。我已经找到了一些东西,并且我已经编辑了我的问题。【参考方案4】:根据其他答案,为您允许的字符构建正则表达式(例如,从您支持的每个字母表中,并删除其他字符。这是Unicode Block Ranges 的列表以获取每种语言的字符值/范围 -这是你需要自己编译的东西。
【讨论】:
【参考方案5】:试试这个:
<?php
$string = "Remove these characters: £äó";
$string = preg_replace('/[^(\x20-\x7F)]*/','', $string);
echo $string;
?>
【讨论】:
问题是字符äó
不能被删除,因为它们用于单词而不是符号。相反,:
应该被删除。
哦!我以为正好相反。问题即将从字符串中删除符号:)以上是关于PHP从字符串中删除符号的主要内容,如果未能解决你的问题,请参考以下文章
php 从提供的内容中生成摘录。剥离HTML,删除尾随标点符号,并在删除文本时添加“更多”字符串。