Pergunta

Eu tenho um site que quero migrar ISO para UTF-8.

Eu tenho um registro no banco de dados indexado pela seguinte chave primária:

s:22:"Informations générales";

O problema é que agora (com UTF-8), quando eu serializo a string, recebo:

s:24:"Informations générales";

(Observe que o tamanho da string agora é o número de bytes, não o comprimento da string)

Portanto, isso não é compatível com registros anteriores não UTF8!

Fiz algo de errado ? Como eu poderia consertar isso?

Obrigado

Foi útil?

Solução

O comportamento está completamente correto. Duas cordas com codificações diferentes gerarão diferentes fluxos de bytes, portanto, diferentes cadeias de serialização.

Outras dicas

Despeje o banco de dados em latim1.

Na linha de comando:

sed  -e 's/latin1/utf8/g' -i ./DBNAME.sql

Importar o arquivo convertido para um novo banco de dados no UTF-8.

Use um script PHP para atualizar cada campo. Faça uma consulta, passe por cada campo e atualize a string serializada usando esta:

$str = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $str);

Depois disso, pude usar o Unserialize () e tudo o que trabalha com o UTF-8.

Php 4 e 5 não possuem suporte de unicode embutido; Acredito que o PHP 6 está começando a adicionar mais suporte do Unicode, embora não tenha certeza de quão completo isso é.

Para não reiniciar uma matriz serializada codificada UTF-8:

$array = @unserialize($arrayFromDatabase);
if ($array === false) {
  $array =  @unserialize(utf8_decode($arrayFromDatabase)); //decode first
  $array = array_map('utf8_encode', $array ); // encode the array again
}

Tinha a ver com a configuração "trimduplicates" no WebPart dos resultados da pesquisa.Para mais informações ...

http:// blogs.perficient.com / Microsoft / 2013/04 / SharePoint-2013-Search-não-Display-All-Results /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top