我想我需要删除0-31和127的字符,
是否有一个函数或一段代码来有效地执行此操作.
我收到错误:
parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xED 0x6E 0x2C 0x20
尝试使用simplexml_load_string第三方源处理XML响应时.原始XML响应确实声明了内容类型:
<?xml version="1.0" encoding="UTF-8"?>
然而,似乎XML并不是真正的UTF-8.XML内容的语言是西班牙语,包含DublínXML中的单词.
我无法让第三方整理他们的XML.
如何预处理XML并修复编码不兼容性?
有没有办法检测XML文件的正确编码?
我试图使用简单的正则表达式和php preg_replace函数从字符串中删除所有标点符号,尽管我收到以下错误:
编译失败:仅在偏移0的类中支持POSIX命名类
我想这意味着我不能在偏移0的类之外使用POSIX命名类.我的问题是,当它表示"在偏移0的类中"时它意味着什么?
$string = "I like: perl";
if (eregi('[[:punct:]]', $string))
$new = preg_replace('[[:punct:]]', ' ', $string); echo $new;
Run Code Online (Sandbox Code Playgroud) 这应该很简单,但我无法弄清楚.
有问题的网站是UTF-8编码的.
客户在我们的网站上填写表格时遇到了问题.以下是他们输入的示例数据.
SPICER-SMITHS迷失了
它看起来像一个常规字符串,但当你将该字符串复制到像记事本++这样的应用程序时,你会看到一个"?" 出现在单词"SMITHS"("SMITH?S")中.
脚本清理字段并执行删除以下字符的额外步骤:
"\r\n", "\n", "\r", "\t", "\0", "\x0B".
虽然它没有抓住这个隐藏的角色.
有谁知道这里发生了什么?
编辑:我正在使用PHP.这是我用来清理字段的函数:
function strip_hidden_chars($str)
{
$chars = array("\r\n", "\n", "\r", "\t", "\0", "\x0B");
$str = str_replace($chars," ",$str);
return preg_replace('/\s+/',' ',$str);
}
Run Code Online (Sandbox Code Playgroud)
编辑2:@thaJeztah引导我回答.我正在测试的字符串是客户从她正在使用的任何应用程序复制并粘贴它后我们的支持票据的输出.实际输入是
SPICER-SMITH'S
所以我遇到了一个问题,我相信正在发生的事情是我正在接收使用一些unicode空间和一些ascii空间的数据,这样看起来相同的某些字符串并不相同,例如"防水"!="防水".这些字符串在我的数据库中显示不同,但是,当存在多字节字符时,通常会看到奇怪的字符:"防水"和"防水".
我想要一种方法使所有空格都是ascii空格,或者如果更容易,所有空格都是多字节空格.
我已经尝试过使用preg_replace,但是这些字符串不再像有效的多字节字符串那样读取了.(字符串中的多字节字符将显示为垃圾).
preg_replace('/[\pZ\pC]/',' ',$field);
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用mb_ereg_replace,但它没有效果.
mb_ereg_replace('/[\pZ\pC]/',' ',$field)
Run Code Online (Sandbox Code Playgroud) 我的 MySQL 数据库中有很多字符串具有控制字符,例如^M. 我想要一个在 PHP 中删除它的正则表达式,但不考虑换行等内容,例如:“\n”。
我尝试了以下方法:
preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $bad);
这似乎让它原地不动。
摆脱这些控制字符的最佳方法是什么?