我正在尝试捕捉文本字段中给出的项目符号并尝试用其他内容替换它,因为在将给定文本呈现给用户之后,它显示为?
而不是•。我测试的是这样的:我用文字中的子弹点写文字并将其复制粘贴到文本字段中。
我的愿景是:
$test = strstr($input,'•');
if($test){ echo "bullet point found!";
}
但它没有工作或没有捕获,或者•
是错误的正则表达式来捕捉要点。
答案 0 :(得分:1)
strstr
时, •
不太可能捕获•
,因为前者是本机字符,后者是HTML实体。
尽管如此:你应该解决潜在的问题。
您可能遇到的编码问题不仅限于项目符号。看到 字符意味着您正在将非UTF-8字符输入UTF-8输出。
原因可能是:
以错误编码保存的源文件(存储字符的位置),例如Windows-1252而不是UTF-8(检查IDE的“另存为...”对话框)
使用latin1
作为连接编码的数据库连接(即使表格为UTF-8)
有关要查看的内容的完整列表,请参阅UTF-8 all the way through。
答案 1 :(得分:0)
尝试使用•
代替•
。
请参阅Special Characters in HTML.
HTML可能不会传递& bull,而是HTML等效。
如果找不到它,请查看HTMLEntities(),这实际上可能是更好的方法(除非你只是想要处理子弹)。
修改强> 使用html_entity_decode()解码HTML,使用HTMLEntities()重新编码给用户。
答案 2 :(得分:0)
首先,在检查输入之前,确保将所有字符编码为其HTML等价物(•
是)。像这样:
$test = strstr(htmlentities($input), '•');
if($test) {
echo "bullet point found!";
}
但是,如果使用htmlentities
对输入进行编码,则之后应该向用户呈现所有UTF-8字符,因为存储不再需要处理UTF-8,从而消除了伪像。
另外:请确保在将用户输入保存到数据库时转义用户输入,最好使用PDO中看到的绑定参数的等效值。