奇怪的preg_replace行为将字符转换为数字

时间:2013-12-09 16:52:31

标签: php mysql regex preg-replace hyphen

我不知道我的问题究竟在哪里,我希望你能帮助我。 2小时的谷歌搜索没有帮助。 :/

我使用简单的SELECT string FROM table从数据库中获取字符串。 这就是我回应它时得到的结果:

echo $string;                   -> some-string
echo htmlspecialchars($string); -> some-string

我认为这已经很奇了,因为如果我将查询更改为

SELECT string FROM table WHERE string LIKE '%some-string%';

使用键盘上的减号,结果为空。我尝试了不同的字符集(“SET NAMES ...”),但这里没有任何区别。所以我坚持使用“SET NAMES utf8”,我的PHP文档也是UTF-8编码的。有谁知道我的问题是什么?

接下来发生的事情更奇怪:

echo preg_replace("/[^0-9a-zA-Z]/", "+", $string);

这应该用加号替换每个非字母数字字符,对吧?所以我的期望是some+string,但它回应:

some++45+string

我在这里缺少什么?任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:0)

数据以some-string的形式存储在您的数据库中。在浏览器中显示时,呈现为some-string。使用htmlspecialchars时,正如您所说some-string。尝试查看源代码,您应分别看到以下内容:

some-string
some-string

您可以更改MySQL搜索以查找%some-string%,它应该可以正常工作,但建议将HTML编码数据存储在数据库中是不明智的。您应该存储原始数据并根据需要对其进行编码以进行显示。原始数据可能是用文字-收到的,但我怀疑是这种情况。您可能需要花时间解码所有存储的数据。