我不知道我的问题究竟在哪里,我希望你能帮助我。 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
我在这里缺少什么?任何帮助都非常感谢。
答案 0 :(得分:0)
数据以some-string
的形式存储在您的数据库中。在浏览器中显示时,呈现为some-string
。使用htmlspecialchars
时,正如您所说some-string
。尝试查看源代码,您应分别看到以下内容:
some-string
some-string
您可以更改MySQL搜索以查找%some-string%
,它应该可以正常工作,但建议将HTML编码数据存储在数据库中是不明智的。您应该存储原始数据并根据需要对其进行编码以进行显示。原始数据可能是用文字-
收到的,但我怀疑是这种情况。您可能需要花时间解码所有存储的数据。