gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:15:01 25 4
gpt4 key购买 nike

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

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

问题是 Manufacture: 之间的空间和 <a>标签的 charcode 为 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 字符。

enter image description here

如果是这种情况,那么 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 '

关于php - 为什么我尝试替换字符串中的字符失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11916003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com