繁体   English   中英

为什么我尝试替换字符串中的字符失败?

[英]Why is my attempt to replace a character in a string failing?

我有一个字符串(取自MySQL数据库,如果有任何区别),看起来很正常:

Manufacture: <a href="http://www.x.com/">Blah</a>

问题是Manufacture:<a>标记之间的空格的字符为194,而不是我期望的32。

这将导致具有以下模式的preg_match失败(请忽略使用正则表达式解析HTML的尝试,我知道这不是一个好主意,但可以预测这个特定的数据集足以摆脱它):

/Manufacture: *(<a[^>]*>([A-Za-z- 0-9]+)<\/a>)/i

如果在文本编辑器中用正常的空格字符替换了流氓空格,然后重试,则表达式将按预期匹配,但是我需要以编程方式对其进行更改。

我尝试了str_replace

$text = str_replace(chr(194), ' ', $text);

但是preg_match仍然失败。 然后,我尝试了preg_replace

$text = preg_replace('/[\xC2]/', ' ', $text);

但这也不起作用,即使通过preg_match运行相同的模式确实包含了预期的匹配。

有人有什么想法吗?

您能否检查从中获取$ text内容的MySQL表的结构? 如果排序规则是utf8_general_ci或类似的内容,则您的字符串很可能包含双字节UNICODE字符。

在此处输入图片说明

在这种情况下,PHP函数iconv应该可以解决问题。 这是PHP手册中的示例。 IGNORE选项应从字符串中删除UNICODE字符。

<?php
$text = "This is the Euro symbol '€'.";

echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;

?>

上面的示例将输出类似于以下内容的内容:

Original : This is the Euro symbol '€'.
TRANSLIT : This is the Euro symbol 'EUR'.
IGNORE   : This is the Euro symbol ''.
Plain    :
Notice: iconv(): Detected an illegal character in input string in .\iconv-example.php on line 7
This is the Euro symbol '

如果您尝试匹配任何空白字符怎么办?
像这样:

/Manufacture:\s*(<a[^>]*>([A-Za-z- 0-9]+)<\/a>)/i

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM