在PHP中将“’”替换为“'”

6

我正在从数据库中获取一个字符串,它可能是像String's Title这样的内容,然而我需要将'替换为',以便我可以将该字符串传递给外部API。我已经尝试了各种转义字符串的方法来使用str_replace(),但都没有成功。


你尝试过使用 str_replace(utf8_encode('’'), "'", $str) 吗?这些字符串的编码分别是什么? - Ry-
1
preg_replace("’","'",$string); - Hans Z
5
你可以展示一下你尝试过的变化吗?这可能是一个字符集问题。 - Pekka
2
每个字符串的编码是什么? - Lusitanian
@mike-r 根据渲染的网页,似乎是一个编码问题。请问您能否指定数据库中使用的确切编码方式? - fsenart
显示剩余3条评论
5个回答

3
$stdin = mb_str_replace('’', '\'', $stdin);

这里有一个实现mb_str_replace()函数的链接:http://www.php.net/manual/en/ref.mbstring.php#107631

我的意思是这个:

<?php
function mb_str_replace($needle, $replacement, $haystack) {
   return implode($replacement, mb_split($needle, $haystack));
}
echo mb_str_replace('’', "'", "String’s Title");

它可以解决编码问题。

谢谢,但那个方法没有起作用:http://www.spoilerseason.com/card/akromas-memorial/就这个问题而言,数据库编码是UTF-8,排序规则是utf8_general_ci。 - Mike R

1

试试这个

$s = "String’s Title";
$h = str_replace("’","'",$s);
echo $h;

也可以尝试使用 preg_replace

echo preg_replace('/\’/',"'","String’s Title");

问题已经说明了尝试使用str_replace! - fsenart

1

我刚刚测试了这个:

echo str_replace('&#8217;', "'", $cardnametitle);
//Outputs: String's Title

编辑:我相信您的数据库条目已经进行了 htmlentities 处理。

注意:尽管它解决了您的问题,但我相信应该有更好的方法来解决它。


问题中已经指定尝试使用了str_replace!为什么没有人读完整个问题?这肯定比简单的“str_replace”更复杂(可能与编码有关)! - fsenart
1
@fsehat,我相信你没有完整地阅读问题。OP没有提供任何代码,我们只知道他可能已经写了str_replace('’', ''', "String’s Title");。因此,根据提供的信息,这大概是最好的答案。 - Adi
数据库编码为UTF-8,排序规则为utf8_general_ci。 - Mike R
另外,如果您不介意花时间解释出了什么问题,我将非常感激。 - Mike R
1
@MikeR,老实说我不确定。但我认为你正在使用一些输入编码,使得像 这样的字符被存储在数据库中像 &#8217;,这也可能是编码问题,但我没有足够的经验来确定。 - Adi
显示剩余7条评论

0

我不知道为什么str_replace()对你不起作用。

我感觉你没有以正确的方式尝试它。

请参考LIVE DEMO

<?php
    $str = "String’s Title";
    echo str_replace('’', '\'', $str) . "\n";
    echo str_replace("’", "'", $str);
?>

输出:

String's Title
String's Title

更新1:

您可能需要尝试将标题设置为

header('Content-Type: text/html; charset=utf-8');

0

我遇到了一个类似的问题,尝试将撇号替换为下划线... 最后我不得不写下这段代码(这是用于WordPress网站):

$replace = array(",","'","’"," ","&#8217;","&#8211;");
$downloadTitle = str_replace( $replace,"_",get_the_title($gallery_id));

我自己也是 PHP 的新手,意识到这段代码相当丑陋,但它对我起作用。我意识到“'”是真正需要考虑的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接